Procedure goose(x, k : integer);
begin
if k = 1 then writeln(x) else goose(2*x + 1, k - 1)
end;
Proseduraga atiga ikkita o’zgaruvchi kiritiladi: x-qidirilayotgan g’ozlar soni; k-ko’llar soni. Prosedura g’ozlar 7 ta ko’ldan uchib o’tganligiga asoslanib tuzilgan, demak boshlang’ich qiymat sifatida x uchun 1, k uchun 7 qiymat kiritish kerak. Prosedurada k soni 1 ga kamayishi kerakligi hisobga olingan bo’lib, prosedurani tugatishning tayanch sharti k ning 1 ga teng bo’lishidir, bundan keyin esa ekranga g’ozlar sonining qiymatini chiqarish kerak:
if k = 1 then writeln(x)
Tayanch shart boshqacha ham bo’lishi mumkin, agar k ning boshlang’ich qiymati 1 ga teng bo’lsa, u holda proseduraga takroran murojaat qilishda k ning qiymatini 1 ga kamaytirmasdan, oshirish kerak (k + 1), bu holda tayanch shart bo’lib k = 7 hisoblanadi.
Quyida bu masalani yechishning tugallangan dasturi keltirilgan:
Program L108;
uses Crt;
var
k : integer;
Procedure goose(x, k : integer);
begin
if k = 1 then write(x) else goose(2*x + 1, k - 1)
end;
begin
write('Ko’llar sonini kiriting'); readln(k);
write('Galada');
goose(1, k);
writeln(' ta g’oz bor edi')
end.
Ushbu mulohazalarga amal qilgan holda quyidagi masalani yeching.
Mustaqil yechish uchun vazifa
109-misol. Studentlar oqimi 5 marta bir xil oraliq topshirgan (oraliq topshira olmaganlar keyingi kuni kelishar edi). Har kuni kelgan studentlarning uchdan bir qismi va yana bir stundentning uchdan bir qismi oraliqni yaxshi topshirardi. 5 martada ham oraliq topshirmagan studentlarning eng kam soni qancha?
Agar masalalar arifmetik yoki geometrik progressiyalar, umuman n-hadi formulalari hamda rekurrent munosabatlar bilan berilgan ketma-ketliklar (ularga keyinroq qaytamiz) bilan bog’liq bo’lsa, u holda rekursiv proseduralarni tuzish oson.
Quyida rekursiv prosedurali yana bir nechta dasturlar keltirilgan.
Avval, jiyan n-tug’ilgan kunda necha pul olishini hisoblovchi dasturni tuzaylik.
Yana rekursiv prosedurani tuzib ko’ramiz, lekin masalani boshqa tomonlama ham yechish mumkin.
Belgilash kiritamiz: k – jiyan yoshining soni , p – amakisi har tug’ilgan kunda beradigan pullar qiymati, s - jiyan umri davomida olgan pullarning qiymati, n dan (n foydalanovchi tomonidan kiritiladi) to 1 gacha teskari tartibda hisoblaydigan tug’ilgan kunlar soni hisoblagichi.
Do'stlaringiz bilan baham: |