double expo(double a, int n)
{ if (n==0) return 1;
if (a==0.0) return 0;
if (n>0) return a*expo(a,n-1);
if(n<0) return expo(a,n+1)/a;
}
Misol uchun funktsiyaga expo(2.0,3) shaklda murojaat qilinganda rekursiv
ravishda funktsiyaning ikkinchi parametri kamaygan holda murojjatlar xosil bo’ladi:
expo(2.0,3),expo(2.0,2),expo(2.0,1),expo(2.0,0). Bu murojaatlarda quyidaga
ko’paytma hisoblanadi: 2.0*2.0*2.0*1 va kerakli natija hosil qilinadi.
SHuni ko’rsatib o’tish kerakki bu funktsiyamizda noaniqlik mavjuddir ya’ni 0.0
ga teng sonning 0 chi darajasi 0 ga teng bo’ladi. Matematik nuktai nazardan bo’lsa bu
holda noaniqlik kelib chiqadi. Yuqoridagi sodda misollarda rekursiyasiz iterativ
funktsiyalardan foydalanish maqsadga muvofiqdir.
Masalan darajani hisoblash funktsiyani quyidagicha tuzish mumkin:
Do'stlaringiz bilan baham: |