informatique (tronc commun des prépas scientifiques) · Chapitre 6 · Exercice de TD
Fibonacci, ou l'arbre qui explose
Fonctions récursives · niveau 2
Énoncé
Coder la suite de Fibonacci () en version récursive naïve. Compter ses appels pour , montrer que sa complexité est exponentielle et proposer la version itérative en .
Corrigé
def fib(n: int) -> int:
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
Pour , l'exécution nécessite appels récursifs (dont 3 évaluations redondantes pour fib(2) et 5 pour fib(1)). Le nombre total d'appels croît à la même vitesse que la suite elle-même, soit de façon exponentielle en . Version itérative en :
def fib_iter(n: int) -> int:
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
Cette itération effectue additions, a une profondeur de pile nulle et résout le problème de redondance de calcul.
Exercices semblables
- Le tracé de Sierpinski corrigé
- Les sous-listes d'une somme donnée corrigé
- Convertir une récursion en boucle corrigé
- Les tours de Hanoï corrigé
- Générer dans l'ordre du code de Gray corrigé