8-dars. Iterative and Recursive function
Darsning Maqsadlari:
- Iterativ va rekursiv funktsiyalarni tushunish.
- Har bir turdagi funktsiyaning afzalliklari va kamchiliklarini o'rganish.
- Misollar orqali iterativ va rekursiv usullarni solishtirish.
Funktsiya Nima?
Funktsiya — bu ma'lum bir vazifani bajaruvchi kod blokidir. Dasturlashda funktsiyalar yordamida kodni tartibga solish, takroriy vazifalarni oson bajarish va kodingizni samarali qilish mumkin. Dasturlashda ikkita asosiy funktsiya usuli mavjud: iterativ va rekursiv.
Iterativ Funktsiyalar
Iterativ funktsiya — bu muayyan bir vazifani bajarish uchun takroriy ravishda bajariladigan kod. U asosan for, while, yoki do-while sikllari yordamida yaratiladi.
Hayotiy Misol
Deylik, bizga 1 dan N gacha bo'lgan sonlarning yig'indisini hisoblash kerak. Iterativ usulda bu quyidagicha ko'rinadi:
#include <stdio.h>
int yigindi(int N) {
int sum = 0;
for (int i = 1; i <= N; i++) {
sum += i; // Har bir i sonini yig'indiga qo'shamiz
}
return sum;
}
int main() {
int N = 5;
printf("1 dan %d gacha bo'lgan sonlar yig'indisi: %d\n", N, yigindi(N));
return 0;
}
Izoh:
Bu yerda for sikli yordamida 1 dan N gacha bo'lgan har bir sonni yig'ib, natijani qaytaramiz.
Afzalliklari:
- Samarali: Ko'p hollarda iterativ usullar ko'proq samarali bo'ladi.
- Oson tushunarli: Kodingizni o'qish va tushunish osonroq.
Kamchiliklari:
- Katta kod: Ba'zan iterativ kod ko'p joy egallaydi.
- Chuqurlik: Ba'zi hollarda iterativ usulni o'rnatish qiyin bo'lishi mumkin.
Rekursiv Funktsiyalar
Rekursiv funktsiya — bu o'z-o'zini chaqiruvchi funktsiya. Bunda funksiya o'zini chaqirishi orqali natijaga erishiladi.
Hayotiy Misol
1 dan N gacha bo'lgan sonlarning yig'indisini rekursiv usulda hisoblash:
#include <stdio.h>
int yigindi(int N) {
if (N == 0) // Bazaviy holat
return 0;
return N + yigindi(N - 1); // O'zini chaqirish
}
int main() {
int N = 5;
printf("1 dan %d gacha bo'lgan sonlar yig'indisi: %d\n", N, yigindi(N));
return 0;
}
Bu yerda N qiymati 0 bo'lganda, funktsiya to'xtaydi va har bir chaqiruv natijasini yig'adi.
Afzalliklari:
- Qisqa kod: Rekursiv usulda kod odatda qisqaroq bo'ladi.
- Oson tushunish: Ba'zan muayyan vazifalar rekursiv usulda yanada osonroq ko'rinadi.
Kamchiliklari:
- Yadroning xotira sarfi: Har bir chaqiruv xotira sarfini oshiradi, bu esa xotira muammolariga olib kelishi mumkin.
- Chuqurlik chegarasi: Juda chuqur rekursiya o'rnatilganda dastur to'xtab qolishi mumkin (stack overflow).
Iterativ va Rekursiv Usullarni Solishtirish
- Katta sonlar: Agar siz katta
Nni hisoblamoqchi bo'lsangiz, iterativ usul xotira muammolaridan qochadi. - Oson vazifalar: Rekursiv usul ma'lum bir murakkablikka ega bo'lganda eng yaxshi yechim bo'lishi mumkin.
Xulosa
Iterativ va rekursiv funktsiyalar dasturlashda muhim o'rin tutadi. Ularning har biri o'z afzalliklari va kamchiliklariga ega. To'g'ri usulni tanlash dasturiy ta'minotning samaradorligini va tushunarli bo'lishini ta'minlaydi.
Savollar:
- Iterativ va rekursiv funktsiyalar o'rtasidagi asosiy farq nima?
- Rekursiv funktsiyaning bazaviy holati nima?
- Qachon iterativ usulni afzal ko'rish kerak?
- Qanday qilib rekursiv usuldan xotira sarfini kamaytirish mumkin?