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:
template < template-parameter-list > declaration
Funksiyalar
Oddiy misol orqali shablonli funksiyani o’rganamiz. Faraz qilaylik ikkita int turiga tegishli o’zgaruvchilar o’rnini almashtiruvchi funksiya mavjud bo’lsin:
#include
void my_swap(int&first,int&second)
{
Int temp (first);
first=second;
second=temp;
}
Int main ()
{
int a=5;
int b=10;
std::cout<my_swap(a,b);
std::cout<}
Do'stlaringiz bilan baham: |