Appearance
Recursie
Funcție recursivă - definiție: Funcție ce conține în definiția ei apeluri ale ei. (Funcție ce ajunge să se apeleze pe ea însăși.)
Recursie
Directă - atunci cand funcția în cauză conține apeluri ale ei (chiar în definiția acesteia)
Indirectă - atunci când funcția ajunge să se apeleze pe ea însăși, dar în definiția funcției nu găsim apeluri ale aceleiași funcții.
Ex Recursie directă:
Ex Recursie indirectă:
Materia de liceu (și facultate, în mare parte) se axează, în principiu, DOAR pe recursia directa.
Să ne amintim:
Ce se întâmplă când se apelează o funcție ?
PC-ul tine minte de unde se apelează funcția
Se copiaza valorile parametrilor pe stiva
Se executa codul funcției
După terminarea funcției, calculatorul continua cu execuția din locul memorat la pasul 1
Obs: Zona de memorie în care se memoreaza apelurile de funcție se numește stivă. În mod evident, fiind o zonă de memorie, aceasta este finită (NU POT SĂ AM O INFINITATE DE APELURI PE STIVA).
Obs: Putem, în mod eronat, să apelăm o funcție recursivă, ce se apelează pe sine la nesfârșit - acest fenomen se numește recursie infinită. Dacă apelăm o astfel de funcție, stiva se va umple până la refuz, iar când programul va încerca sa mai adauge încă un apel pe stiva, programul va “crapa” - acest fenomen se numește “stack overflow” (stack - stiva; overflow - “a da pe afară”, inundație).
Ex de recursie infinită:
Ex 2:
Cum “gândim” o funcție recursivă ?
Cazul de bază/Cazul banal
cazul/situația unde răspunsul este “banal”
cazul/momentul în care se oprește recursia
Cazul general
pentru ca recursia să meargă mai departe
aici voi avea apelul recursiv
Promisiune: Mă voi asigura întotdeauna că în momentul în care tratez cazul banal voi opri execuția.
Obs: În scrierea funcției prima data tratez cazul banal - de ce ? ca sa mă asigur ca NU am recursie infinită.
N factorial
(vom trata ca un șir)
fn = fn-1 * n
f1 = 1