Iterative va Recursive Funksiyalar C Dasturlash Tilida
Bu qo'llanmada biz "Iterative" va "Recursive" funksiyalarni batafsil ko'rib chiqamiz. Ikki yondashuv o'rtasidagi farqlarni tushunish, qachon va qaysi holatda qaysi yondashuvdan foydalanish kerakligini tushunishga yordam beradi. Har bir qismda biz amaliy misollar ko'rsatib, ularni kod satrlari orqali tushuntiramiz.
Iterative Funksiyalar (Tsikllar Yordamida)
Iterative yondashuvda muammolarni hal qilish uchun tsikllardan foydalaniladi. Bu yondashuvda kod qayta-qayta bir qator ishlarni bajarish uchun tsikllardan (masalan, for
, while
) foydalanadi.
Amaliy Misol: Faktorialni Hisoblash (Iterative Yondashuv)
Faktorial funksiyasi misolida, biz tsikl yordamida faktorialni hisoblaymiz.
Faktorial nima? Faktorial — bu 1 dan n gacha bo'lgan barcha butun sonlarning ko'paytmasi. Masalan:
5!=5×4×3×2×1=120
Qadam-baqadam tushuntirish:
int factorial(int n)
— Bu funksiyaning argumentin
, ya'ni faktoriali hisoblanadigan son.int result = 1;
— Dastlab natijani 1 ga teng deb belgilaymiz, chunki 1 ko'paytuvchi element hisoblanadi.for (int i = 1; i <= n; i++)
— Bu tsikl yordamidai
1 dann
gacha o'sadi va har safarresult
o'z-o'zigai
ni ko'paytiradi.result *= i;
— Bu qadamda har safarresult
o'zigai
qiymatini ko'paytiradi.return result;
— Natija qaytariladi.printf()
— Asosiy funksiyada faktorialni chop etadi.
Recursive Funksiyalar (O'zini-o'zi Chaqaruvchi Funksiyalar)
Recursive yondashuv muammolarni o'zini o'zi chaqirish orqali hal qiladi. Recursive funksiyalar bazaviy holat va recursive chaqiruvlardan iborat. Recursive funksiyalar murakkab muammolarni kichikroq qismlarga ajratish uchun ishlatiladi.
Amaliy Misol: Faktorialni Hisoblash (Recursive Yondashuv)
Keling, shu faktorialni recursive yondashuv bilan qanday hisoblash mumkinligini ko'rib chiqamiz.
Qadam-baqadam tushuntirish:
if (n == 0 || n == 1)
— Bu bazaviy holat, ya'ni rekursiyaning tugash sharti. Agarn
0 yoki 1 bo'lsa, funksiya 1 qaytaradi.return n * factorial(n - 1);
— Recursive chaqiruv:n
ni(n - 1)
ning faktorialiga ko'paytiradi.Recursive funksiya har safar o'zidan kichikroq qiymatni chaqiradi va bazaviy holatga yetganda natijalarni qaytaradi.
Iterative va Recursive Funksiyalarni Taqqoslash
Xususiyat | Iterative Yondashuv | Recursive Yondashuv |
---|---|---|
Kodning soddaligi | Oddiy va tushunarli, tsikllar yordamida | Murakkabroq, o'zini o'zi chaqiruvchi |
Xotira sarfi | Kamroq xotira ishlatadi | Ko'proq xotira sarflaydi (stack frame) |
Ishlash tezligi | Umuman tezroq ishlaydi | Ba'zi hollarda sekinroq |
Murakkab muammolarni yechish | Oddiy muammolar uchun yaxshi | Murakkab muammolarni yechishda yaxshi |
Amaliy Misol: Fibonacci Sonini Hisoblash
Iterative Yondashuv
Fibonacci sonlari qatori 0 va 1 dan boshlanib, har bir keyingi son oldingi ikkita sonning yig'indisi bilan aniqlanadi. Keling, Fibonacci sonini tsikl yordamida hisoblaylik.
Recursive Yondashuv
Endi Fibonacci sonini recursive yondashuv bilan ko'ramiz:
Recursive Funksiyalarning Afzalliklari va Kamchiliklari
Afzalliklari:
Recursive funksiyalar murakkab masalalarni sodda qilib ko'rsatadi.
Natural rekursiya, masalan, daraxt strukturasi yoki graf algoritmlarida samarali ishlaydi.
Kamchiliklari:
Recursive funksiyalar ko'p miqdorda stack xotirasidan foydalanadi. Katta sonlar bilan ishlaganda "stack overflow" xatosi yuzaga kelishi mumkin.
Ba'zi hollarda iterativ yondashuvdan sekinroq bo'lishi mumkin.
Iterative Funksiyalarning Afzalliklari va Kamchiliklari
Afzalliklari:
Iterative yondashuv ko'proq samarali va stack xotiradan tejamli foydalanadi.
Katta hajmdagi masalalarda "stack overflow" xavfi yo'q.
Kamchiliklari:
Kod ko'pincha murakkabroq ko'rinishi mumkin, ayniqsa, rekursiv yondashuv tabiiyroq bo'lgan masalalarda.
Iterative va Recursive Funksiyalarni Tanlash
Iterative yondashuv oddiy tsikl talab qiladigan vazifalarda qo'llaniladi va samaraliroq ishlaydi.
Recursive yondashuv ko'proq tabiiy bo'lgan muammolarda, masalan, daraxt yoki graf tuzilmalari bilan ishlashda afzal qilinadi.
Umid qilamanki, ushbu qo'llanma sizga iterative va recursive funksiyalar haqida tushuncha berdi. Misollar yordamida har bir qadamni amaliy tarzda ko'rib chiqdik, bu sizga kodni yaxshiroq tushunishga yordam beradi.
Last updated