Yangi rekursiv chaqiruvni amalga oshirishda kompyuter quyidagilarni bajaradi:
ushbu bosqichdagi hisoblashlar holatini eslab qoladi.
stek (asosan xotira sohasi)da lokal o’zgaruvchilarning yangi to’plamini hosil qiladi (chunki, joriy chaqiruvda o’zgaruvchini yo’qotib qo’ymaslik kerak).
har bir chaqiruvda yangi xotira sarflanadi va protsedura chaqiruvi hamda protseduraga qaytish uchun vaqt yo’qotiladi.
42. Rekursiya chuqurligi nima, rekursiv va iteratsion algoritmlarning o’zaro farqi?
Shuning uchun ham rekursiyani qo’llashda quyidagiga alohida e’tibor berish kerak:
Rekursiya chuqurligi (tarkibidagi chaqiruvlar soni) – yetarli darajada kichik bo’lishi shart.
Katta chuqurlikdagi rekursiyadan foydalanishda dasturda uzoq vaqt ishlash va stekning to’lib toshib ketishi (stekli xotiraning yetishmovchiligi) holati yuz berishi mumkin. Shuning uchun ham, agar masalani rekursiyasiz ham yechish mumkin bo’lsa, u holda rekursiyani qo’llash tavsiya etilmaydi.
Masalan, faktorialni hisoblash uchun oddiygina for tsiklidan foydalanish mumkin (bunday tsikl yordamida olinadigan yechim iterativ (qadamma-qadam) deb ataladi):
int Factorial (int n)
{
int i, fact=1;
for (i=2; i<=n; i++)
fact*=i;
return fact;
}
Bu dastur rekursiv dasturga nisbatan tezroq ishlaydi. Ixtiyoriy rekursiv dasturlarni juda murakkab bo’lsa ham rekursiyasiz yozish mumkinligi isbotlangan.
43. Shablon tushunchasi, funktsiya shabloni misol yordamida tushuntirib bering?
Shablon (angl. template) —umumlashgan algoritmlarni ba’zi parametrlarida o’zgarishlar kiritmasdan (masalan, ma’lumot turini, bufer o’lchami va h.k.) qabul qilish va kodlash uchun mo’ljallangan C++ tilining muhim vositasi hisoblanadi.
Shablonlarni tavsiflash template kalit so’zidan boshlanib, undan keyin burchakli qavs («<» va «>») ichida uning parametrlar ro’yxati keltiriladi. Shundan keyin shablon muhitini e’lon qilish amalga oshiriladi (masalan, funktsiya yoki klass), umumiy ko’rinishi quyidagicha bo’ladi:
Dostları ilə paylaş: |