C rekursiya
Rekursiya
Rekursiya — funksiyaning o‘zini o‘zi chaqirish usuli. Bu usul murakkab masalalarni hal qilish osonroq bo‘lgan oddiy masalalarga ajratish imkonini beradi.
Rekursiyani tushunish biroz qiyin bo‘lishi mumkin. Uning qanday ishlashini anglashning eng yaxshi yo‘li — u bilan tajriba o‘tkazish.
Rekursiya misoli
Ikki sonni qo‘shish oson, ammo sonlar oralig‘ini qo‘shish murakkabroq. Quyidagi misolda sonlar oralig‘ini qo‘shish uchun rekursiyadan foydalaniladi: vazifa ikki sonni qo‘shishdan iborat oddiy amalga ajratiladi:
Misol
1 dan 10 gacha bo‘lgan barcha sonlarni qo‘shish uchun rekursiyadan foydalaning:
int sum(int k);
int main() {
int result = sum(10);
printf("%d", result);
return 0;
}
int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
Misol izohi
sum() funksiyasi chaqirilganda, u k parametrini k qiymatidan kichik barcha sonlar yig‘indisiga qo‘shadi va natijani qaytaradi. k 0 ga teng bo‘lganda funksiya shunchaki 0 qaytaradi. Dastur ishga tushganda quyidagi qadamlarni bajaradi:
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
k 0 ga teng bo‘lganda funksiya o‘zini chaqirmagani uchun dastur shu yerda to‘xtaydi va natijani qaytaradi.
Dasturchi rekursiya bilan juda ehtiyotkor bo‘lishi kerak, chunki hech qachon tugamaydigan yoki haddan tashqari ko‘p xotira yoxud protsessor quvvatini sarflaydigan funksiyani yozib qo‘yish juda oson. Biroq to‘g‘ri yozilganda rekursiya dasturlashda juda samarali va matematik jihatdan nafis yondashuv bo‘lishi mumkin.
Misol
5 dan boshlab teskari sanash uchun rekursiyadan foydalaning:
void countdown(int n);
int main() {
countdown(5);
return 0;
}
void countdown(int n) {
if (n > 0) {
printf("%d ", n);
countdown(n - 1);
}
}
Funksiya n qiymati 0 bo‘lguncha o‘zini n - 1 argumenti bilan chaqiradi.
Rekursiya yordamida faktorialni hisoblash
Bu misolda 5 ning faktorialini hisoblash uchun rekursiv funksiyadan foydalaniladi:
Misol
int factorial(int n);
int main() {
printf("Factorial of 5 is %d", factorial(5));
return 0;
}
int factorial(int n) {
if (n > 1) {
return n * factorial(n - 1);
} else {
return 1;
}
}
Faktorial — sonni undan kichik barcha sonlarga, 1 gacha ko‘paytirish demakdir. Masalan, 5 ning faktoriali: 5 * 4 * 3 * 2 * 1 = 120. Ta’rifga ko‘ra, 0! ham 1 ga teng.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
