Sunteți pe pagina 1din 10

INTRODUCERE N RECURSIVITATE

DEFINIIA RECURSIVITII
Recursivitatea reprezint o tehnic de programare de o importan deosebit. Ea permite o exprimare extrem de concis i clar a algoritmilor de rezolvare a unor probleme complexe. Un subprogram este recursiv dac se apeleaz pe el nsui (se autoapeleaz).

REALIZAREA AUTOAPELULUI
Ce afieaz urmtoarea funcie recursiv?
#include<iostream.h> void exemplu (int n)

{ if (n!=0)
{ cout<<n<<endl; exemplu(n-1); } } void main() {

exemplu(3);
}

REALIZAREA AUTOAPELULUI
Dar aceast funcie?
#include<iostream.h> int suma(int n)

{ if (n!=0)
return n+suma(n-1); } void main() { cout<<suma(3); }

REALIZAREA AUTOAPELULUI
Ce diferen este ntre cele dou subprograme?
#include<iostream.h> void exemplu (int n) { if (n!=0) { cout<<n<<endl; exemplu(n-1); } } } void main() { cout<<suma(3); } #include<iostream.h> int suma(int n)

{ if (n!=0)
return n+suma(n-1);

void main()
{ exemplu(3); }

REALIZAREA AUTOAPELULUI
n cazul funciilor de tip void, autoapelul se realizeaz prin apelul funciei respective, din interiorul ei. Apelul se face la fel ca n cazul n care funcia este apelat din exterior. n cazul funciilor care nu sunt de tip void, autoapelul se realizeaz prin instruciunea return. Ea este de forma return expresie dar n expresia respectiv trebuie s intre i funcia care se autoapeleaz.

MECANISMUL RECURSIVITII
Problem: S se calculeze recursiv n!. Definiia recursiv a lui n! este:

n0 1, n! fact(n) n fact(n-1), altfel

cu n N

MECANISMUL RECURSIVITII
Subprogramul fact transcrie definiia
#include<iostream.h> int fact (int n)

{ if (n==0) return 1;
else } void main() { int n; cout<<n=; return n*fact(n-1);

recursiv.

cin>>n;
cout<<n<<!=<<fact(n); }

CUM GNDIM UN ALGORITM RECURSIV? Ce se ntmpl la un nivel se ntmpl la orice nivel. Subprogramul care se autoapeleaz trebuie s conin instruciunile corespunztoare unui nivel. Starea tratat de subprogram se gsete pe un anumit nivel al stivei.

CUM GNDIM UN ALGORITM RECURSIV? Observaii Pentru orice algoritm recursiv exist unul iterativ care rezolv aceeai problem. Nu ntotdeauna alegerea unui algoritm recursiv reprezint un avantaj. Recursivitatea presupune mai mult memorie n comparaie cu iterativitatea.

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