Fibonacci
La suite de Fibonacci est définie par l'équation de récurrence :
Nous allons utiliser cette suite pour donner des techniques utiles pour l'étude d'algorithmes récursifs
Valeurs
En utilisant l'équation de récurrence, montrez que :
En utilisant le fait que la suite de Fibonacci est une suite récurrente linéaire, on peut même donner une valeur explicite de chaque valeur. Démontrons le :
En utilisant le fait que les deux racines du polynôme $P(X) = X^2 -X-1$ sont $\phi_+ = \frac{1 + \sqrt{5}}{2}$ et $\phi_- = \frac{1 - \sqrt{5}}{2}$, montrez que pour $n>0$ :
Fibonacci récursif
algorithme fibonacci_rec(n: entier) → entier:
si n ≤ 2:
rendre 1
rendre fibonacci_rec(n-1) + fibonacci_rec(n-2)
Montrez que le programme précédent est bien un algorithme qui calcule la valeur de Fibonacci.
Montrez que la complexité de l'algorithme fibonacci_rec(n)
est en $\Omega(F(n))$.
Sa complexité est rédhibitoire.
Récursif terminal
L'algorithme récursif est sous optimal car il recalcule plein de fois la même chose. Pour calculer $F(n)$ il calcule deux fois $F(n-2)$, une fois dans la somme et une fois dans le calcul de $F(n-1)$.
Utilisez la transformation en récursion terminale pour améliorer la complexité de cet algorithme récursif.
Fibonacci Itératif
Créez un algorithme itératif calculant $F(n)$ avec une complexité de $\mathcal{O}(n)$