Documente Academic
Documente Profesional
Documente Cultură
RECURSIVITATE
1. RECURSIVITATE
1.1. Conceptul de recursivitate
n informatic i n matematic, recursivitatea este un concept fundamental.
Spunem c o noiune este definit recursiv dac n cadrul definiiei intervine
nsi noiunea care se definete.
De exemplu un descendent al unei persoane este un copil al su sau un
descendent al unui copil al su. n acest caz, pentru a defini noiunea de
descendent am folosit noiunea nsi.
n matematic apar frecvent relaii recursive, denumite i relaii de recuren.
De exemplu, s considerm irul Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21,...
Observm c n acest ir primii doi termeni sunt 0 i 1, iar n rest, fiecare
termen se obine nsumnd cei doi termeni care l preced. Prin urmare, o definiie
recursiv pentru irul Fibonacci este:
fib : N N
dac n 1
fib(n) = n,
dac n > 1
fib(n 1) + fib(n 2),
Apare ntrebarea: orice descriere de acest tip este corect? S considerm
urmtorul exemplu:
f :N N
dac n = 0
f (n) = 1,
dac n > 0
1 + f (n + 1),
Observai c f(0)=1, iar dac n>1, pentru a calcula f(n) trebuie s evalum
mai nti f(n+1). Dar pentru a evalua f(n+1), va fi nevoie de f(n+2),
deoarece n>0 implic n+1>0, .a.m.d. Prin urmare, funcia f nu poate fi evaluat
dect pentru 0.
1. RECURSIVITATE
1. RECURSIVITATE
Funcia Ackermann
Evaluai funcia Ackerman pentru m, n numere naturale date.
Funcia Ackermann este: ac : N x N N,
Numrare
Fie a1, a2, ..., an un ir de n (0<n<20) numere ntregi i x un numr ntreg.
Scriei o funcie recursiv care s determine numrul de apariii ale lui x n ir.
Generare
Fie n N*. S se genereze toate succesiunile de n (n<20) caractere '.' i '_'
(asemntor codurilor Morse).
De exemplu, pentru n=2 vei afia:
.
.
_
_
.
_
.
_
Generarea permutrilor
Fie n N*. Scriei un program recursiv de generare a permutrilor de ordin n.
De exemplu, pentru n=3 programul va genera:
1
1
2
2
3
2
3
1
3
1
3
2
3
1
2
1. RECURSIVITATE
3 2 1
Generarea aranjamentelor
Fie nN* i mN, mn. Scriei un program recursiv care s genereze
aranjamentele de n elemente luate cte m.
De exemplu, pentru n=3 i m=2, programul va genera:
1
1
2
2
3
3
2
3
1
3
1
2
Generarea combinrilor
Fie nN* i mN, mn. Scriei un program recursiv care s genereze
combinrile de n elemente luate cte m.
De exemplu, pentru n=4 i m=2, programul va genera:
1
1
1
2
2
3
2
3
4
3
4
4