Combien d'appels coûte le chevauchement
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 5 — Récursivité
Énoncé
Le cours montre l'arbre des appels de fib 4 et annonce un coût exponentiel. Établir la formule exacte : si est le nombre d'appels engendrés par fib n, montrer que , où est la suite de Fibonacci.
let rec fib n = if n < 2 then n else fib (n-1) + fib (n-2)Corrigé
Démonstration, par récurrence forte sur .
Base. (un seul appel, celui du sommet). Et , . La formule tient.
Hérédité. Pour , l'appel au sommet en engendre deux : . Par hypothèse,
Vérification, mesurée en instrumentant la fonction :
n : 4 6 8 10 12 20 25 30
appels : 9 25 67 177 465 21891 242785 2692537
2F(n+1)-1: 9 25 67 177 465 21891 242785 2692537
Ce que la formule dit. Comme avec , le nombre d'appels est : exponentiel. Pour , deux millions et demi d'appels pour calculer un nombre à sept chiffres.
Et la conclusion à ne pas tirer. Ce n'est pas « la récursivité est chère ». Le nombre de valeurs distinctes en jeu est ; c'est le chevauchement qui est cher, c'est-à-dire le fait de recalculer autant de fois qu'il apparaît dans l'arbre. Retenir les valeurs déjà calculées ramène le coût à sans changer une ligne de la décomposition : c'est toute la programmation dynamique du chapitre chap:dynamique.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.