Sunteți pe pagina 1din 3

5.

Recursivitate
5.1. Prezentare general
Recursivitatea este una dintre noiunile fundamentale ale informaticii.
Def: Recursivitatea este mecanismul general de elaborare al programelor. Ea const n posibilitatea unui
subprogram de a se autoapela.
Recursivitatea a aprut din necesitatea de a transcrie direct formule matematice recursive. n timp acest
mecanism a fost extins i pentru ali algoritmi.

5.2. Mecanismul recursivitii


Care este mecanismul prin care programele se autoapeleaz? S ne amintim cum memoreaz programele
parametrii transmii:
Pentru memorarea parametrilor, subprogramele folosesc o zon de memorie numit stiv.
Memorarea parametrilor transmii se face n ordinea n care acetia figureaz n antet: de la stnga la
dreapta.
Pentru parametrii transmii prin valoare, se transmite valoarea, iar pentru cei transmii prin referin
se transmite adresa.
n cadrul subprogramului, parametrii transmii i memorai n stiv sunt variabile. Numele lor este
cel din lista parametrilor formali.
Observaii:
Subprogramul lucreaz cu datele aflate pe un anumit nivel al stivei pentru variabilele transmise prin
valoare, dar i cu variabilele funciei main(), dac acestea sunt transmise prin referin.
Exist posibilitatea ca subprogramul s lucreze direct cu variabilele globale fr ca acestea s fie
transmise prin referin. Dup cum tim variabilele globale pot fi accesate din orice subprogram,
dac sunt declarate la nceputul codului surs.
n cazul unui numr foarte mare de autoapelri, exist posibilitatea ca segmentul de stiv s se ocupe
total, caz n care programul se va termina cu eroare.
Recursivitatea presupune mai mult memorie.

5.3. Cum gndim un algoritm recursiv


O gndire recursiv exprim concentrat o anumit stare, care se repet la infinit. Aceast gndire se aplic n
elaborarea algoritmilor recursivi cu o modificare esenial: adugarea condiiei de terminare. n absena
acestei condiii nu se poate vorbi despre un algoritm deoarece acetia sunt finii.
Pai de elaborare:
Ce se ntmpl la un nivel se ntmpl la orice nivel;
Subprogramul care se autoapeleaz trebuie s conin instruciunile corespunztoare unui nivel;
Observaii:
Un algoritm recursiv se elaboreaz folosind acest tip de gndire , nu o gndire precum cea folosit
pn acum, cnd am elaborat algoritmi iterativi.
Pentru orice algoritm recursiv exist unul iterativ care rezolv aceeai problem.
Alegerea unui algoritm recursiv nu este ntotdeauna avatajoas.

5.4. Aplicaii recursive


5.4.1. Calculul lui n!
5.4.2. Se citete x ntreg. Se cere programul pentru calculul funciei:
x 1
F ( F ( x 2))

F ( x)

, x 12
, x 12

5.4.3. Se d funcia, definit pe N N . Se citesc m i n. S se calculeze Ack(m,n).


n 1

,m 0

Ack ( m, n)

Ack ( m 1,1)
,n 0
Ack (m 1, Ack (m, n 1)) , altfel

5.4.4. irul lui Fibonacci. Se consider irul definit astfel:

Un

0
,n 0
1
,n 1
U n 1 U n 2 , altfel

5.4.5.Se dau dou numere naturale a i b. Se cere s se calculeze cel mai mare divizor comun al lor.
Indicaie: se folosete formula recursiv a celui mai mare divizor comun

,a b

cmmdc( a, b) cmmdc( a b, b) , a b
cmmdc( a, b a ) , b a

5.4.6. S se scrie o funcie recursiv pentru calculul sumei cifrelor unui numr natural.
5.4.7. S se scrie o funcie recursiv care citete caractere i le afieaz n ordinea invers citirii. Sfritul
irului este marcat de caracterul 0.
5.4.8. S se scrie o funcie recursiv pentru transformarea unui numr natural n, din baza 10 n baza k
(1<k<10).
5.4.9. Se consider irurile definite recurent astfel: a0 a, b0 b; a, b 0
a bn1
an n1
, bn a n1bn1
2
S se scrie un program care s citeasc a, b i n i s calculeze a n i bn .
5.4.10. Generarea recursiv a produsului cartezian. Se citete n, numr natural, care are semnificaia de
numr de mulimi. Se citesc, de asemenea, numerele naturale n 1, n2,..., nn unde ni reprezint numrul
de elemente al mulimii Ai. Se cere s se calculeze produsul cartezian al mulimilor A1, A2, ... , An. Se
consider c elementele mulimii i sunt {1,2, ... , ni}.
Indicaie: Dac n este 1 avem o singur mulime A1. n acest caz programul afieaz elementele lui
A1 sub form de mulimi.
5.4.11. Generarea permutrilor. Se d mulimea {1,2, ... , n}. Se cer toate permutrile acestei mulimi.
5.4.12. Generarea aranjamentelor. Se citesc n i k (k<=n) numere naturale. Se consider c o mulime A are
elementele {1,2, ... , n}. Se cere s se afieze toate aranjamentele de n luate cte k.
5.4.13. Generarea recursiv a combinrilor. Se citesc n i k (k<=n) numere naturale. Se consider c o
mulime A are elementele {1,2, ... , n}. Se cere s se afieze toate submulimile sale care au k
elemente combinri de n luate cte k.
5.4.14. Generarea partiiilor unei mulimi. Se consider mulimea {1,2, ... , n}. Se cer toate partiiile acestei
mulimi.
Indicaie: Fiind dat o mulime A, submulimile A1, A2, ... , Ak constituie o partiie a acesteia dac sunt
ndeplinite condiiile:
Mulimile sunt disjuncte ntre ele (adic nici o mulime nu are nici un element comun cu nici o alt
mulime): Ai A j , i j ;
k

Reuniunea tuturor acestor mulimi este mulimea A: Ai


i 1

5.5.

Metoda Divide et impera

5.5.1. Prezentare general

A.

5.5.2. Aplicaii

S-ar putea să vă placă și