Sunteți pe pagina 1din 2

Iterativitatea

Iterativitatea este procesul prin care rezultatul este obinut ca urmare a


execuiei repetate a unui set de operaii, de fiecare dat cu alte valori de intrare.
Numrul de iteraii poate fi necunoscut sau cunoscut, dar determinabil pe parcursul
execuiei. Metoda de repetivitate este cunoscut sub numele de ciclu (loop) i poate
fi realizat prin utilizarea urmtoarelor structuri repetitive: ciclul cu test iniial,
ciclul cu test final, ciclul cu numr finit de pai. Indiferent ce fel de structur
iterativ se folosete este necesar ca numrul de iteraii s fie finit.
Iteratia este execuia repetat a unei poriuni de program pn la ndeplinirea unei
condiii(while,for etc.) Dupa cum sa vazut,orice algoritm recursiv poate fi transcris
intr-un algoritm iterativ si invers.

Recursivitatea
Recursivitatea este procesul iterativ prin care valoarea unei variabile se
determin pe baza uneia sau a mai multora dintre propriile ei valori anterioare.
Structurile recursive reprezint o alternativ de realizare a proceselor repetitive
fr a utiliza cicluri. Mecanismul recursivitatii consta in posibilitatea ca un
subprogram sa se autoapeleze.
Exista dou tipuri de recursivitate:
1) recursivitate direct - cand un subprogram se autoapeleaz n corpul su ;
2) recursivitate indirect - cnd avem dou subprograme (x si y), iar x face apel la y
i invers ;
Se folosesc algoritmi recursivi atunci cnd calculele aferente sunt descrise n
forma recursiv.
Recursivitatea este frecvent folosit n prelucrarea structurilor de date definite
recursiv. Un subprogram recursiv trebuie scris astfel ncat s respecte regulile :
a) Subprogramul trebuie s poat fi executat cel puin o dat fr a se autoapela;
b)Subprogramul recursiv se va autoapela ntr-un mod n care se tinde spre
ajungerea n situaia de execuie fr autoapel.
Pentru a permite apelarea recursiv a subprogramelor, limbajul Pascal dispune de
mecanisme speciale de suspendare a execuiei programului apelant, de salvare a
informaiei necesare i de reactivare a programului suspendat .

Pentru implementarea recursivitaii se folosete o zon de memorie n care se


poate face salvarea temporal a unor valori. La fiecare apel recursiv al unui
subprogram se salveaz n aceast zon de memorie starea curent a execuiei sale.
Variabilele locale ale subprogramului apelant au aceleai nume cu cele ale
subprogramului apelat, orice referire la aceti identificatori se asociaz ultimului
set de valori alocate n zona de memorie. Zona de memorie rmne alocat pe tot
parcursul execuiei subprogramului apelat i se dealoc n momentul revenirii n
programul apelat. Zona de memorie nu este gestionat explicit de programator ci
de ctre limbaj.
La terminarea execuiei subprogramului apelat recursiv, se reface contextul
programului din care s-a facut apelul. Datorit faptului c la fiecare autoapel se
ocup o zon de memorie, recursivitatea este eficient numai dac numrul de
autoapelri nu este prea mare pentru a nu se ajunge la umplerea zonei de memorie
alocat.
Recursivitatea ofer avantajul unor soluii mai clare pentru probleme i a unei
lungimi mai mici a programului. Ea prezint ns dezavantajul unui timp mai mare
de execuie si a unui spaiu de memorie alocat mai mare. Este de preferat c
atunci cnd programul recursiv poate fi transformat intr-unul iterativ s se fac apel
la cel din urm
Avantaje
-se realizeaz programe mai rapide;
-se evit operaiile mult prea dese de;
salvare pe stiva calculatorului;
-se evit incrcarea calculatorului n
cazul apelurilor repetate.
Dezavantaje
-n cazul unui nr. mare de autoapelri, exist posibilitatea ca segmentul de stiva s
depaeasc spaiul alocat, caz n care programul se va termina cu eroare;
-recursivitatea presupune mai mult memorie n comparaie cu iterativitatea.

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