Sunteți pe pagina 1din 11

RECURSIA

RECURSIA DIRECT

CONTINUAI ENUNURILE:
Un subprogram este.
Subprogramele sunt de 2 tipuri ..
Funcia este .
Procedura este .
Apelul unei subprogram se face prin intermediul ...
Tipul rezultatului unei funcii poate fi ...
Funcia returneaz rezultatul prin.
Procedura returneaz rezultatul prin
Parametri actuali sunt ..
Corespondena ntre un parametru actual i un
parametru formal se face.

CARACTERISTICILE
Se
Rezultatul
definete
se
n
ntoarce
partea
Returneaz
Extinde
Estinde
Variabile
Rezultatul
Poate
finoiunea
noiune
apelat
locale
se
0,1sau
intoarce
Lista
Returneaz
parametrilor
un
Nume
declarativ
prin
nume
a programului
mai
de
prin
deinstruciune
expresie
multe
elparametru
nsui
rezultate
formali
singur
rezultat
variabil

FUNCII

comune

PROCEDURE

Tema: RECURSIA
Subcompetene:
Prelucrarea datelor cu ajutorul subprogramelor predefinite i a
subprogramelor elaborate de ctre utilizator.
Organizarea comunicrii ntre programul / subprogramul apelant i
subprogramul apelat
Proiectarea structural a algoritmului i a programului.
Utilizarea recursiei pentru rezolvarea problemelor

Obiective operaionale:
O1 s defineasc termenii: program, subprogram, funcie
procedur, apel, parametri valoare, parametri variabil, parametri
formali, parametri actuali, variabile globale, variabile locale,
O2 s determine corectitudinea antetelor i apelurilor de
subprograme;
O3 s poat evalua programe ce utilizeaz subprograme
recursive, s determine valoarea funciei pentru anumite date de
intrare;
O4 s explice algoritmul subprogramului recursiv, modul de
execuie al subprogramului recursiv;
O5 s elaboreze programe n care se utilizeaz subprograme
recursive

DEFINIII I IDEI ANCOR

Un subprogram se numete recursiv dac el se autoapeleaz pe el


nsui.

n matematic relaiile recursive se numesc relaii de recuren.


(Unele iruri pot fi definite cu ajutorul unor formule n funcie de
termenul sau termenii precedeni). Spre exemplu irul numerelor
naturale: 1,2,3 irul numerelor pare: 2,4,6,8,10... irul
Fibonacci 1,1,3,5,8,13,21...(primii doi termeni sunt egali cu 1, iar
fiecare urmtor terme va fi egal cu suma a doi termeni
precedeni)

Scriei o funcie nerecursiv care calculeaz valoarea lui N!


Function fact(N:integer):integer;
Var P, i: integer;
Begin
P:=1; For i:=1 to N do P:=P*i
Fact:=P;
End;
Pentru N=5
P=1
i=1
i=2
i=3
i=4

P:=P*i
P:=P*i
P:=P*i
P:=P*i

P=1*1=1
P=1*2=2
P=2*3=6
P=6*4=24

i=5

P:=P*i

P=24*5=120

Calculul lui N! recursiv

5!= 5*4!

Function fact(N:integer):integer;
Begin
If N=0 then fact:=1
else fact:=N* fact(N-1);
End;

5!
=5*24=120
4!
=4*6=24

4!=4*3!
3!=3*2!

3!=3*2=6

2!=2*1!

2!=2*1=2

1!=1*0!

0!=1

1!=1*1=1

0!=1

Scriei un program care utilizeaz funcia recursiv de calcul a lui N!


Program p1;
Var x,f: integer;
Function fact(N:integer):integer;
Begin
If N=0 then fact:=1
else fact:=N* fact(N-1);
End;
Begin
Write(da valoarea lui x); readln
(x);
f:= fact (x);
Writeln (f);
End.
Analizai execuia programului ,
dac condiia va fi N<0
Pentru lecia practic : Executai
pentru N=0, 5, 7, 8,10

Se consider funcia F de mai jos definit recursiv. Ce va returna


apelul F(7)?
Function F (n:integer):integer;
Begin
If n=0 then F:=0
else if (n mod 2=0) then F:=F(n-1)+n
else F:=F(n-1) - n
End;
a)-28
b)28
c)-4
d)4
e)0
9

S se scrie un program ce calculeaz suma


primilor n termeni din irul numerelor naturale
utiliznd o funcie recursiv / iterativ
Program suma_recursiv;
Var n: integer;
Function S(k:
integer):integer;
Begin
If k=0 then S:=0
else S:=k+S(k-1);
End;
Begin
Write( n=); readln(n);
Writeln(suma este , S(n));
End.

Program suma_iterativ;
Var n: integer;
Function S(k:
integer):integer;
Var i:integer;
Begin
S:=0;
For i:= 1 to k do S:=S+i
End;
Begin
Write( n=); readln(n);
Writeln(suma este , S(n));
End.

10

Concluzii:
Un algoritm recursiv are acelai efect ca i un ciclu: repet execuia unei anumite
secvene de instruciuni
E necesar ca repetarea s nu fie la infinit, adic trebuie s existe o condiie de
oprire, cazul elementar ce poate fi calcul direct
n majoritatea cazurilor algoritmii recursivi pot fi nlocuii cu algoritmi nerecursivi
(iterativi), la dorina programatorului.
Varianta recursiv este recomandat n special pentru problemele definite prin
relaii de recuren, care permite o formulare a rezultatelor mult mai clar i mai
concis:
Avantajele recursiei:
1.Structura programului simpl
2.Volumul de scriere a programului - mic
Dezavantajele recursiei:
1.Necesarul de memorie mare
2.Testarea i depnarea programelor - complicat

11