Sunteți pe pagina 1din 16

RECURSIVITATEA

Prezentare generala
-notiunea de recursivitate din programare deriva in mod natural din notiunea de matematica cunoscuta sub numele de recurenta -in viata de zi cu zi ne ofera de asemenea nenumerate exemple

Aplicaii
Recursivitatea este folosita pentru:

-creearea de sisteme biologice -aflarea a orice de la cresterea populatiei la bataile neregulate ale inimii

Recursivitatea in matematica
Enuntul problemei
Plecnd de la o singur pereche de iepuri i tiind c fiecare pereche de iepuri produce n fiecare lun o nou pereche de iepuri, care devine "productiv" la vrsta de o lun, calculai cte perechi de iepuri vor fi dup n luni.

Formula de calcul
fn+1 = fn + fn-1, f1 = 1; (1) f0 = 0.

Recursivitatea n natur
PLANTELE: - au aranjamentul frunzelor dispus intr-o secventa Fibonacii in jurul tulpinei COCHILIA : - s-a ajuns la concluzia ca aceasta spirala a cochiliei urmareste dimensiunile date de secventa lui Fibonacci. CORPUL: - mana umana are 5 degete, fiecare degat avand 3 falange separate prin 2 incheieturi care respecta sirul lu Fibonacci

Fractali

Recursivitatea in informatica
Este un mecanism general de elaborare a programelor. Ea consta in posibilitatea ca un subprogram sa se autoapeleze.

Realizarea autoapelului
In cazul functiilor
-autoapelul se realizeaza printr-o operatie de atribuire, operatia prin care numele functiei trebuie sa figureze in partea dreapta a operatorului de atribuire

Ex:

function suma(n:integer):integer; begin

suma:=0;
if n<>0 then suma:=n+suma(n-1); end; begin writeln(suma(7)); end.

Realizare autoapelului
In cazul procedurilor:
-autoapelul se realizeaza prin apelul procedurii respective, din interiorul ei. Apelul se face la fel ca in cazul in care procedura este apelata din exterior.

Ex: procedure exemplu(n:integer);


begin if n<>0 then begin writeln(n); exemplu (n-1); end; end; begin exemplu(7); end.

Execuia apelurilor recursive

Orice apel de subprogram are ca efect salvarea pe stiva calculatorului a adresei de revenire, a valorilor parametrilor transmisi prin valoare si a adresei parametrilor transmisi prin referinta precum si alocarea de spatiu pe stiva pentru variabilele locale ale subprogramului.

Aplicatii recursive
Enuntul problemei

Studiaza recursivitatea indirecta si realizeaza programul care desenaza covorul cu unul dintre modelele:

Implementare
Dati click pe imagine pentru a vedea fisierul

Pascal cu rezolvarea:

Dati click pe imagine pentru a rula programul:

CMMDC
Studiul modului de executie a apelurilor

recursive cu exemplificare pentru problema CMMDC(a,b).

Dati click pe imagine pt. a viziona rezolvarea problemei.

CONCLUZII
Cand utilizam un algoritm recursiv?
-atunci cand algoritmul care urmeaza sa fie implementat descrie o notiune recurenta sau algoritmul in sine este recursiv -principalul avantaj al utilizarii tehnicii recursive este ca permite o descriere concisa a algoritmului

Avantaje
-se realizeaza programe mai rapide -se evita operatiile mult prea dese de salvare pe stiva calculatorului -se evita incarcarea calculatorului in cazul apelurilor repetate

Dezavantaje
-in cazul unui nr. mare de autoapelari, exista posibilitatea ca segmentul de stiva sa depaseasca spatiul alocat, caz in care programul se va termina cu eroare. -recursivitatea presupune mai multa memorie in comparatie cu iterativitatea

Bibliografie
Internet Manual de informatica clasa aX-a (tehnici si

programare PASCAL si C++): TUDOR SORIN

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