You are on page 1of 6

რეკურსია ვუწოდოთ ქვეპროგრამას, რომლის წარმოდგენა შეიძლება

შემდეგი ბრძანებების სიმრავლის სახით:


P={X,p}
სადაც p არის P ქვეპროგრამის გამოძახება. ასეთი განსაზღვრის
შედეგად მივიღებთ გამოძახებების თეორილად უსასრულო ჯაჭვს.

რეალურად ეს ჯაჭვი ავარიულად შეწყდება მახსოვრობის (სტეკის)


უკმარისობის მიზნით.
დაზუსტება:
რეკურსია ვუწოდოთ ქვეპროგრამას, რომლის წარმოდგენა შეიძლება
შემდეგი ბრძანებების სიმრავლის სახით:
P={X, if (პირობა) p}
სადაც p არის P ქვეპროგრამის გამოძახება. ასეთი განსაზღვრის
შედეგად მივიღებთ გამოძახებების თეორილად უსასრულო ჯაჭვს.
ინფორმაციის შენახვა - გადაცემა:

რეკურსიული ქვეპროგრამების გამოყენებისას ინფორმაციის გადასაცემად


გამოიყენება პარამეტრები, და ასევე გლობალური ცვლადები. გლობალური
ცვლადების სიმრავლე A ხელმისაწვდომია როგორც ძირითადი
პროგრამისთვის, ასევე P ქვეპროგრამის ყველა ეგზემპლიარისთვის.
ლოკალური ცვლადების სიმრავლეები Bi წარმოადგენენ ქვეპროგრამების შიდა
რესურს. ქვეპროგრამის გამოძახების წინ წარმოებს მათი მნიშვნელობების
დამახსოვრება სტეკში, ხოლო ქვეპროგრამაში დაბრუნებისას - სტეკიდან
ავტომატიური აღდგენა
მაგალითები:
1. ხშირად რეკურსიის აწყობა შეიძლება რეკურენტული ფორმულების მიხედვით.
რეკურენტული ფორმულებით ხშირად განსაზღვრავენ მიმდევრობებს, რომელთა
ყოველი წევრის მნიშვნელობა დაითვლება წინა წევრის გამოყენებით. განვიხილოთ
არითმეტიკული პროგრესია, რომელიც წარმოადგენს რიცხვთა უსასრულო
მიმდევრობას, რომლის ყოველი წევრი ერთი და იგივე სიდიდით d განსხვავდება
წინა წერვრთან შედარებით. ნატურალური რიცხვები არის არითმეტიკული
პროგრესია, რომლის პირველი
წევრი a1=1, ხოლო d (პროგრესიის სხვაობა)=1. შედეგად მივიღებთ მიმდევრობას:
1, 2, 3, . . . (a1=1, a2= 2, a3=3, . . . )
შეადგინეთ პროგრამა, რომელიც დაითვლის მოცემელი არითმეტიკული
პროგრესიის რიგით n-ურ წევრს:
ა) ფორმულის an= a1+d*(n-1) გამოყენებით,
ბ) ციკლის გამოყენებით,
გ) რეკურსიული ფუნქციის გამოყენებით.
რეკურსიული ამოხსნა. გამოვიყენოთ არითმეტიკული პროგრესიის რეკურენტული
ფორმულა: an= an-1+d. მის მიხედვით აეწყობა რეკურსიული ფუნქცია:

#include <iostream>
using namespace std;
int a1,d,n,an;

int f (int n) {
if (n>1) return f(n-1)+d;
else return a1;
}

main(){
cin>>a1>>d>>n;
cout<<f(n)<<endl;
}
2. ნატურალური n რიცხვის ფაქტორიალი n! ვუწოდოთ ნამრავლი:
n!=1*2*3*…*n. შეადგინეთ პროგრამა, რომლითაც დაითვლით მოცემული
რიცხვის ფაქტორიალს:
ა) ციკლის გამოყენებით,
ბ) რეკურსიული ფუნქციის გამოყენებით.

3. ფიბონაჩის რიცხვები ვუწოდოთ უსასრულო მიმდევრობას, რომლის


პირველი ორი წევრი უდრის ერთს:
f1=1, f2=1, ხოლო ყოველი შემდეგი არის წინა ორი წევრის ჯამი:
f k=f k-1 + f k-2. შედეგად მივიღებთ მიმდევრობას:
1, 1, 2, 3, 5, 8, 13, 21, …
შეადგინეთ პროგრამა, რომლითაც დაითვლით ფიბონაჩის მიმდევრობის
რიგით n-ურ წევრს:
ა) ციკლის გამოყენებით,
ბ) რეკურსიული ფუნქციის გამოყენებით.

You might also like