Sunteți pe pagina 1din 9

R

Recursivitate?!?!?!

Recursie

Recursivitatea este un principiu strns legat


de inducia matematicii.
n informatic sensul este aproape analog cu
cel din matematic reprezentnd un
subprogram care se autoapeleaz.
Putem defini recursiv iruri, funcii, etc.

iruri definite recursiv

Recursie

Exemplu I:
irul iterativ (an) n ,definit prin formula
an=2n poate fi definit recursiv astfel:
a0=1
an+1=2an , pentru n=0, 1, 2, ...
Exemplu II:
Binecunoscutul ir fibonacci este definit
recursiv n felul urmtor:
f0=0, f1=1,
fn+2=fn+1+ fn , pentru n=0, 1, 2, ...

Algoritmi recursivi

Recursie

Un algoritm poate fi numit recursiv dac


procedeul de rezolvare a problemei se realizeaz
prin intermediul autoapelrii.
Pentru orice algoritm recursiv exist un
echivalent iterativ i viceversa.
Exemplu:
gcd(a,b)
1: dac a=0 atunci gcdb
2: altfel gcdgcd(b mod a,a)

Recursie

irul Fibonacci

13204

n=

f(3)
f(2)

1 1

f(1) f(1)

0
+
f(1)
f(0)
1

fibo4=

f(4)

Var fibo4:Integer;
function
fibo(n:Integer):Integer;
begin
if n=0 then fibo:=0 else
if n=1 then fibo:=1 else
fibo:=fibo(n-1)+fibo(n-2);
end;
begin
f(2) fibo4:=fibo(4);
end.

0
f(0)

irul Fibonacci iterativ


program fibonacci_iterativ;
Var n,z,x,y,i:Integer;
begin
Readln(n);
if n=0 then y:=0 else
begin
x:=0;
y:=1;
for i:=1 to n-1 do
begin
z:=x+y;
x:=y;
y:=z;
end;
end;
Writeln(Al ,n, lea numar fibonacci este ,y);
end.

Recursie

Calcularea sumei primelor n numere naturale

10

suma4=
n

suma

4 10 4+ 6=10
6 3+ 3=6

Var suma4:Integer;
function suma(n:Integer):Integer;
begin
if n>1 then
suma:=suma(n-1)+n
else suma:=1;
end;
begin
suma4:=suma(4);
end.

3 2+1=3

2
1

Recursie

Avantaje i dezavataje

Recursie

Avantaje
Algoritmii recursivi sunt de obicei mai scuri,
mai elegani i mai uor de neles dect cei
iterativi.
...etc

Dezavantaje
Algoritmii iterativi sunt de obicei mai eficieni n
timp i spaiu de memorie.
etc

The

End