Documente Academic
Documente Profesional
Documente Cultură
Divide-et-impera
2
Un exemplu simplu de recursivitate
void CollectContributions(int n) {
if (n <= 100)
colecteaza banii de la un singur
donator
else{
gaseste 10 voluntari
fiecare voluntar strange n/10 dolari
//CollectContributions(n/10)
combina banii stransi de voluntari
}
}
3
Structura unei functii recursive.
Paradigma recursivitatii.
if (testeaza cazul simplu) {
} else {
}
4
Aplicarea recursivitatii
Trebuie identificat cazul de baza pentru care raspunsul se
impera
5
Exemple - factorial
Iterativ Recursiv
int Fact(int n) { int Fact(int n) {
int product; if (n == 0) {
product = 1; return 1;
} }
return product;
}
}
6
Explicatii
f = fact(4)
7
8
Leap of faith
Strategia psihologica: presupunerea ca orice apel recursiv
practice
fact(4) = 4 * fact(3)
9
Fibonacci
Problema reproducerii iepurilor (1202 – Leonardo
Fibonacci)
Fiecare pereche de iepuri produce o noua pereche in fiecare
luna
Iepurii devin mai fertili in a doua luna a vietii lor
10
Calcularea numerelor Fibonacci
11
12
13
Eficienta implementarii recursive
14
Alternativa mai eficienta
Functie
wrapper
Termenul n este termenul n-1 din secventa care incepe cu un pas mai
tarziu
15
Detectarea palindroamelor
Se verifica daca prima si ultima litera este aceeasi
16
Implementare mai eficienta
17
Cautarea binara
Cautarea intr-un array sau vector a unui element particular
18
Algoritmul de cautare liniara – nu avem informatii cu privire
19
20
Recursivitate mutuala
Daca o functie f apeleaza o functie g, care la randul ei
21
Daca limitam cautarea la multimea numerelor naturale,
22
23
Sa gandim recursiv!
Reductionism - un obiect poate fi inteles
apelurilor recursive.
Cand programul recursiv nu merge, cauta in eroarea in
implementare recursiva, nu in mecanismul recursiv!
24
Checklist pentru gasirea erorii
Incepe programul recursiv cu cazul simplu? (programul trebuie sa inceapa cu
if)
Ai rezolvat cazul simplu corect? (daca ai scris fact(0) = 0 si nu fact(0) = 1,
tot programul va merge prost)
Descompunerea recursiva simplifica problema? (ai grija sa nu scrii o bucla
infinita)
Apelurile recursive sunt subprobleme de aceeasi forma cu cea initiala?
25
Pe saptamana viitoare!
26