Recursivitate
clasa a X-a
Definitia recursivitatii
Recursivitate este proprietatea functiilor de a se autoapela (din interiorul lui se apelează pe el insusi).
Fig 2: Structura generala a unui subprogram recursiv
( returnarea nu este obligatorie )
-
din afara subprogramului se face un prim apel al acestuia
-
programul se auto-apeleaza de un anumit numar de ori
-
la fiecare noua auto-apelare a algoritmului, se executa din nou secventa de instructiuni ce reprezinta corpul sau, cu alte date => inlantuire
In corpul algoritmului trebuie sa existe cel putin o testare a unei conditii de oprire, la indeplinirea careia se intrerupe lantul de auto-apeluri.
Intuitiv -> identificati conditia de oprire din imaginea alaturata
Daca apelul subprogramului apare chiar in corpul sau, recursivitatea se numeste directa, altfel indirecta.
Observatii
-
Majoritatea algoritmilor repetitivi se pot implementa atat in varianta nerecursiva(iterativa), cat si in varianta recursiva.
- Varianta recursiva este recomandata in special pentru probleme definite prin relatii de recurenta.
- Algoritmi recursivi sunt in general greu de urmarit (depinde), necesita timp de executie mai lung si spatiu de memorie mai mare
Vizualizare a recursiei
Vizualizare a arborelui de recursie
Visualgo Recursion Tree
Visualgo Binary Search Tree
Meet Fractals, they won't bite
Sometimes they do
... just run the algorithm
Tema data la Matematica, Anul 1
Facultatea de Informatica
Sierpinski triangle
3D, maybe ?
Me no need recursion
Me no need fractals
Not really ...
Sierpinski Carpet
First GSM antennas
Exercitii
Exemplu
Ce afiseaza urmatoarea functie recursiva?
Mai multe exemple/probleme aici: http://www.geeksforgeeks.org/tag/recursion/
Challenge
Ce afiseaza urmatorul subprogram cu urmatorul apel ?
f(1,3)
Desperate times, desperate measures
De avut in vedere pentru Anul 1, Structuri de Date
Facultatea de Informatica
relatia de recurenta: T(n) = 2 * T(n/2) + cn^2
Se analizeaza prin sumare:
T(n) = n^2 + 2^1 * (n/2)^2 + 2^2 * (n/4)^2 ...
Observatie - arbore de recursie
Text
a. Rezultat pentru u = 42 si v = 35?
b. Dati exemplu de 2 nr naturale u, v distincte si nenule a.i. F(u, v) sa returneze 5
c. Daca u = 14, care este cea mai mare valoare strict mai mica decat 100 pentru v, astfel incat F(u, v) sa returneze 7 ?
Challenge #2
Tema
Realizati un subprogram C/C++ care realizeaza transformarea din baza 10 intr-o baza B (cuprinsa intre 2-16) prin metoda recursiei.
Concluzii
- Recursivitatea este bazata pe autoapelarea unui subprogram (un suprogram se apeleaza pe sine insasi in corpul sau)
- Majoritatea algoritmilor repetitivi se pot implementa atat in varianta nerecursiva(iterativa), cat si in varianta recursiva
- Recursivitatea este o metoda de rezolvare a problemelor ce se poate dovedi costisitoare din punct de vedere al memoriei
Resurse suplimentare
- Nu uitati sa afisati output la rulare pentru a va intelege mai bine programul: https://www.quora.com/How-will-you-visualize-recursion-in-general-and-in-data-structures-like-trees
- CS50 - Binary search example - https://youtu.be/zFenJJtAEzE?t=16m12s
- more CS 50: Recursion - https://www.youtube.com/watch?v=VrrnjYgDBEk
Voi pune materiale aici: https://github.com/xR86/algo/tree/master/teaching-practice/recursion
Intrebari ?
Here's a potato
Recursivitate
By xr86
Recursivitate
- 1,382