Sunteți pe pagina 1din 4

Ministerul Educaie al Republicii Moldova

Universitatea de Stat din Moldova


Facultatea de Fizic i Inginerie

Structuri de date

Tema: Functia
recursiva

Efectuat de studentul grupei TI,


2.2, anul II, Bunduchi Andrei

Controlat de:
Sprncean Veaceaslav

Chiinu 2017
Structuri de date:
Recursivitate este proprietatea functiilor de a se autoapela. Toate instructiunile din
program se executa de cate ori este apelata functia.Orice functie recursiva trebuie
sa contina o cinditie de oprire respectiv,de continuare.
La fiecare reapel al functiei se executa aceeas segventa de instructiuni.La fiecare
reapel,in zona de stiva a memoriei:
-se ocupa un nivel nou
-se memoreaza valoarea parametrilorformali transmisi prin valoare
-adresa parametrilor formali transmisi prin referinta
-adresa de revenire
-variabilele cu valorile din momentul respectiv

Toate instructiunile din subprogram se executa pentru fiecare reapel


-se executa instructiunile din functie pana la instructiunea de reapel
-se executa din nou aceeas segventa de instructiuni pana la conditia de oprire
-procedeul se reia pana la intalnirea conditiei de oprire

Pentru fiecare apel s-a salvat in stiva un nivel,apoi pentru fiecare dintre aceste
apeluri se executa instructiunile ramase in functie cu valoarea datelor din varful
stivei(atentie!vor fi in ordine inversa introducerii lor in stiva).
Recursivitatea s-a impus in programare, odata cu aparitia unor limbaje de nivel
inalt, ce permit scrierea de module ce se autoapeleaza (PASCAL, LISP, ADA, ALGOL,
C sunt limbaje recursive, spre deosebire de FORTRAN,BASIC,COBOL, nerecursive).

Recursivitatea e strins legata de iteratie.Iteratia este executia repetata a unei


portiuni de program, pina la indeplinirea unei conditii (while, do-while , for din C).
Recursivitatea presupune executia repetata a unui modul, insa in cursul executiei
lui (si nu la sfirsit, ca in cazul iteratiei), se verifica o conditie a carei nesatisfacere,
implica reluarea executiei modulului de la inceput, fara ca executia curenta sa se fi
terminat. In momentul satisfacerii conditiei se revine in ordine inversa din lantul de
apeluri, reluandu-se si incheindu-se apelurile suspendate.

Un program recursiv poate fi exprimat: P=M(Si,P) , unde M este multimea ce


contine instructiunile Si si pe P insusi.
Structurile de program necesare si suficiente in exprimarea recursivitatii sunt
functiile apelate prin nume. Recursivitatea poate fi directa - o functie P contine o
referinta la ea insasi, sau indirecta - o functie P contine o referinta la o functie Q ce
include o referinta la P.
Apelul recursiv al unei functii trebuie sa fie conditionat de o decizie care sa
impiedice apelul in cascada ( la infinit ); aceasta ar duce la o eroare de program -
depasirea stivei.
Concluzie:

n acest laborator am aplicat cunotine din C pentru a elabora program cu


recursivitate, am nvat sintaxa acesteia, cum se apeleaz i cum se
lucreaz cu recursivitatea n C. Recursivitatea se apeleaz pe sine nsui ,
dar trebuie numai dect s fie prezent condiia de oprire a recursiei. Dac
se vor respecta toate condiiile, vom primi un program eficient fr erori
detectate. Recursivitatea ofera avantajul unor solutii mai clare pentru
probleme si a unei lungimi mai mici a programului. Ea prezinta insa
dezavantajul unui timp mai mare de executie si a unui spatiu de memorie
alocata mai mare.

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