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

Intrebari ?

Here's a potato

Recursivitate

By xr86

Recursivitate

  • 1,382