Python (école d'ingénieur) · Chapitre 6 · Exercice
Optimisation de Fibonacci
Complexité algorithmique
Énoncé
Proposer trois implémentations du calcul du -ième terme de la suite de Fibonacci avec les complexités suivantes :
- Récursive naïve ( en temps, en espace pile)
- Récursive avec mémoïsation ( en temps, en espace)
- Itérative ( en temps, en espace supplémentaire)
Corrigé
Voici les codes des trois versions :
# 1. Version récursive naïve
def fibo_naif(n):
if n <= 1:
return n
return fibo_naif(n-1) + fibo_naif(n-2)
# 2. Version récursive avec mémoïsation (cache)
def fibo_memo(n, memo=None):
if memo is None:
memo = {}
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibo_memo(n-1, memo) + fibo_memo(n-2, memo)
return memo[n]
# 3. Version itérative (optimale)
def fibo_iter(n):
if n <= 1:
return n
a, b = 0, 1
for _ in range(2, n+1):
a, b = b, a + b
return b
Le tableau suivant récapitule les différences d'efficacité :
| Version | Complexité Temporelle | Complexité Spatiale |
|---|---|---|
| Récursive naïve | (pile) | |
| Mémoïsation | (dictionnaire) | |
| Itérative | (deux variables) |
100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- 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.