algorithmique (école d'ingénieur) · Chapitre 10 · Application directe du cours
Fibonacci récursif
Complexité des programmes · niveau 3 (difficile)
Énoncé
La suite de Fibonacci est définie par , et . On la programme directement :
static long fib(int n) {
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
}
- Soit le nombre d'appels de
fibprovoqués par l'appelfib(n)(celui-ci compris). Écrire l'équation de récurrence de et montrer que . - En admettant avec , donner la complexité.
- Proposer un programme en .
Corrigé
- et pour . Posons : et . La suite vérifie la récurrence de Fibonacci avec et ; par récurrence, , donc . Vérification (programme
FibonacciNaif.java) :
n = 10 : f(n) = 55, appels = 177, 2f(n+1)-1 = 177
n = 20 : f(n) = 6765, appels = 21891, 2f(n+1)-1 = 21891
n = 30 : f(n) = 832040, appels = 2692537, 2f(n+1)-1 = 2692537
n = 40 : f(n) = 102334155, appels = 331160281, 2f(n+1)-1 = 331160281
- Chaque appel coûte un temps constant hors appels récursifs : le temps est en , exponentiel. Chaque fois que augmente de , le temps est multiplié par environ .
- On calcule les valeurs par croissants, en ne gardant que les deux dernières :
static long fibonacci(int n) {
long a = 0, b = 1; // a = f(k), b = f(k+1), avec k = 0
for (int k = 0; k < n; k++) { // a = f(k) et b = f(k+1)
long c = a + b; a = b; b = c; // a = f(k+1) et b = f(k+2)
}
return a; // a = f(n)
}
tours de boucle : . Le chapitre 11 descend même à avec des puissances de matrices.
100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.