Adloun

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é :

VersionComplexité TemporelleComplexité Spatiale
Récursive naïve (pile)
Mémoïsation (dictionnaire)
Itérative (deux variables)

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →