Adloun

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 fib provoqués par l'appel fib(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

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 →