Suite de Fibonacci
suite d'entiers naturels définie par la relation de récurrence : u_n = u_(n-1) + u_(n-2) / De Wikipedia, l'encyclopédie encyclopedia
Cher Wikiwand IA, Faisons court en répondant simplement à ces questions clés :
Pouvez-vous énumérer les principaux faits et statistiques sur Suite de Fibonacci?
Résumez cet article pour un enfant de 10 ans
Pour les articles homonymes, voir Fibonacci.
En mathématiques, la suite de Fibonacci est une suite de nombres entiers dans laquelle chaque nombre est la somme des deux nombres qui le précèdent. Elle commence par les nombres 0 et 1[1] puis se poursuit avec 1 (comme somme de 0 et 1), 2 (comme somme de 1 et 1), 3 (comme somme de 1 et 2), 5 (comme somme de 2 et 3), 8 (comme somme de 3 et 5), etc. Les termes de cette suite, i.e. les nombres apparaissant dans cette suite, sont appelés nombres de Fibonacci.
La suite de Fibonacci est répertoriée comme suite A000045 de l'OEIS.
Elle est liée au nombre d'or, noté φ (phi), qui intervient dans l'expression du terme général de la suite. Inversement, la suite de Fibonacci intervient dans l'écriture des réduites de l'expression de φ en fraction continue : les quotients de deux termes consécutifs de la suite de Fibonacci sont les meilleures approximations du nombre d'or.
La suite de Fibonacci est définie par , et la relation de récurrence pour . Le tableau suivant donne les 15 premiers termes de la suite de Fibonacci :
F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | F14 | F15 | ... | Fn |
0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 | 144 | 233 | 377 | 610 | ... | Fn – 1 + Fn – 2 |
Dans cet article, nous avons fait commencer la suite à avec , comme le fait Edouard Lucas[1]. D'autres auteurs font débuter la suite à 1[2] : , etc. Le nombre Fn s'appelle parfois le n-ième nombre de Fibonacci[2] (bien qu'il soit techniquement le n+1-ième si on commence à 0).
En Inde
Dans la branche des mathématiques concernant la combinatoire, les mathématiciens indiens s'intéressent à des problèmes de lexicographie et de métrique. Le mètre āryā (en) est composé de syllabes pouvant être brèves (de longueur un mātrā, cf. alphasyllabaire) ou longues (de longueur deux mātrās). La question est de savoir comment peuvent s'alterner les brèves et les longues dans un vers de n mātrās. Ce problème apparaît très tôt en Inde, sous le nom maatraameru (montagne de cadence), dans le travail du grammairien du sanskrit, Pingala, auteur du Chhandah-shastra (l'art de la Prosodie), vers 450 ou 200 av. J.-C. Le mathématicien indien Virahanka (en) en a donné des règles explicites au VIIIe siècle. Le philosophe indien Acharya Hemachandra (c. 1150) (et aussi Gopala, c. 1135) ont revisité le problème de manière assez détaillée[3].
Si la syllabe longue L est deux fois plus longue que la syllabe courte C, les solutions sont, en fonction de la longueur totale de la cadence :
- 1 C → 1
- 2 CC,L → 2
- 3 CCC, CL, LC → 3
- 4 CCCC, CCL, CLC, LCC, LL → 5
- 5 CCCCC, CCCL, CCLC, CLCC, LCCC, CLL, LCL, LLC → 8
Le nombre de cadences fait apparaître les termes de la suite de Fibonacci. En effet, une cadence de longueur n peut être constituée en ajoutant C à une cadence de longueur n – 1, ou L à une cadence de longueur n – 2. Ainsi, le nombre de cadences de longueur n est la somme des deux nombres précédents de la suite.
Si on note Sn, le nombre de manière d'alterner les brèves et les longues dans un vers de n mātrās, cette remarque conduit naturellement à la relation de récurrence suivante : , formule explicitement donnée dans l’œuvre de Virahanka[4].
Population de lapins
La suite doit son nom à Leonardo Fibonacci qui, dans un problème récréatif posé dans l'ouvrage Liber abaci publié en 1202, décrit la croissance d'une population de lapins : « Quelqu’un a déposé un couple de lapins dans un certain lieu, clos de toutes parts, pour savoir combien de couples seraient issus de cette paire en une année, car il est dans leur nature de générer un autre couple en un seul mois, et qu’ils enfantent dans le second mois après leur naissance. »[5]
Le problème de Fibonacci est à l'origine de la suite dont le n-ième terme correspond au nombre de paires de lapins au n-ième mois. Dans cette population idéale, on suppose que :
- au début du premier mois, il n'y a qu'une paire de lapereaux ;
- les lapins ne peuvent procréer qu'à partir de l'âge de deux mois ;
- chaque début de mois, toute paire susceptible de procréer engendre exactement une nouvelle paire de lapereaux ;
- les lapins ne meurent jamais (la suite de Fibonacci est donc croissante).
Notons Fn le nombre de couples de lapins au début du mois n. Jusqu’à la fin du deuxième mois, la population se limite à un couple ; on note F1 = F2 = 1.
Dès le début du troisième mois, le premier couple de lapins atteint l'âge de deux mois et engendre un second couple de lapins ; on note alors F3 = 2.
Plaçons-nous maintenant au mois n et cherchons à exprimer ce qu'il en sera deux mois plus tard, soit au mois n + 2 : les Fn + 2 couples de lapins sont formés des Fn + 1 couples du mois précédent et des couples nouvellement engendrés.
Or, n'engendrent au mois n + 2 que les couples pubères, c'est-à-dire ceux qui existaient déjà deux mois auparavant, qui sont en nombre Fn. On a donc, pour tout entier n strictement positif :
On choisit alors de poser F0 = 0, de manière que cette relation soit encore vérifiée pour n = 0.
On obtient ainsi la forme récurrente de la suite de Fibonacci : chaque terme de cette suite est la somme des deux termes précédents ; pour obtenir chacun de ces deux termes, il faut faire la somme de leurs termes précédents… et ainsi de suite, jusqu'à ce que ces deux termes soient les deux termes initiaux, F1 et F0, qui sont connus.
Il existe plusieurs façons d'obtenir une expression mathématique du n-ième terme de la suite de Fibonacci.
Expression fonctionnelle
Le calcul du n-ième terme de la suite de Fibonacci via la formule de récurrence requiert le calcul des termes précédents. Au contraire, une expression fonctionnelle de la suite de Fibonacci est une expression où le calcul du n-ième terme ne présuppose pas la connaissance des termes précédents. Binet a redécouvert une formule en 1843[6], qui avait déjà été obtenue par de Moivre[réf. nécessaire] en 1718 et par Euler en 1765[7]. Cette expression fonctionnelle s'appelle la formule de Binet :
Comme la suite de Fibonacci est linéairement récurrente d’ordre 2, son équation caractéristique est une équation du second degré :
- ,
dont les deux solutions sont :
- ,
où φ est le nombre d'or. Les suites (φn) et (φ'n) engendrent alors l'espace vectoriel des suites vérifiant un + 2 = un + 1 + un. Il en résulte que :
- où α et β sont des constantes à déterminer à partir de F0 et F1.
Les conditions initiales F0 = 0 et F1 = 1 conduisent au système suivant :
On obtient alors :
Nous obtenons finalement l'expression fonctionnelle recherchée.
(Ces calculs restent valables pour n entier négatif quand la suite est prolongée comme ci-dessous.)
Quand n tend vers +∞, Fn est équivalent à . Plus précisément, φn tend vers l'infini et φ' n tend vers zéro car .
En fait, dès le rang n = 1, le deuxième terme est assez petit pour que les nombres de Fibonacci puissent être obtenus uniquement à partir du premier terme :
- Fn est l'entier le plus proche de (et il lui est supérieur ou inférieur, selon la parité de n).
Il existe d'autres démonstrations de la formule de Binet, telles que la transformation en Z et la technique des fonctions génératrices.[réf. nécessaire]
Remarquons qu'une fois découverte, cette formule se démontre aussi par récurrence (y compris pour n entier négatif).
Expression matricielle
De la relation , on déduit et ; ceci permet d'écrire la forme matricielle :
En appliquant le déterminant, on obtient simplement l'identité de Cassini (propriété 5 ci-dessous) : .
Et en calculant de deux façons , on obtient (propriété 2 ci-dessous) : .
Expression par déterminant d'ordre n - 1
En développant par rapport à la première colonne le déterminant d'ordre n :
- , on obtient Dn = Dn – 1 – abDn – 2 ; comme , si ab = –1, on obtient : Dn = Fn + 1 d'où, pour :
Comme l'avait déjà remarqué Johannes Kepler[8], le taux de croissance des nombres de Fibonacci, c'est-à-dire , converge vers le nombre d'or φ.
En effet, puisque la suite Fn est équivalente à (cf. supra, section Expression fonctionnelle), la suite est équivalente à , qui est donc sa limite.
En fait plus généralement, toutes les suites vérifiant la même relation de récurrence que la suite de Fibonacci (cf. infra, section Suites de Fibonacci généralisées) satisfont cette propriété, sauf celles commençant par a et aφ'.
- La série des inverses des nombres de Fibonacci non nuls est convergente, et sa somme est parfois appelée constante de Fibonacci inverse ; Richard André-Jeannin en a démontré l'irrationalité [9] en 1989[10].
- On a également l'égalité [11],[12], voir la suite A079585 de l'OEIS.
- Le nombre est lui aussi irrationnel[12], voir la suite A338305.
- La dénomination de « suite de Fibonacci généralisée » est attribuée plus généralement à toute suite (Gn) définie sur ℕ vérifiant pour tout entier naturel n, Gn + 2 = Gn + 1 + Gn. Ces suites sont précisément celles pour lesquelles il existe des nombres a et b tels que pour tout entier naturel n, Gn + 2 = aFn + bFn + 1. Ainsi, l'ensemble des suites de Fibonacci est un sous-espace vectoriel de et les suites (Fn) et (Fn + 1) en forment une base.
- Le nombre d'or est la racine positive du polynôme X2 – X – 1, ainsi φ2 = φ + 1. Si l'on multiplie les deux côtés par φn, on obtient φn + 2 = φn + 1 + φn, donc la suite (φn) est une suite de Fibonacci. La racine négative du polynôme, φ' = 1 – φ, possède les mêmes propriétés, et les deux suites linéairement indépendantes (φn) et (φ'n), forment une autre base de l'espace vectoriel.
Dénombrements de compositions
Fn+1 est égal au nombre de suites finies d'entiers égaux à 1 ou 2 dont la somme est égale à n (ou compositions de n formées des entiers 1 ou 2) [13]. Par exemple car . On peut donc interpréter Fn+1 comme :
- le nombre de façons différentes de paver un rectangle 2×n au moyen de dominos 2×1,
- le nombre de façons de vider un tonneau de n litres à l'aide de bouteilles de un ou deux litres.
Démonstration : les compositions de n se terminant par 1 sont obtenues en ajoutant 1 à la fin d'une composition de , celles se terminant par 2 sont obtenues en ajoutant 2 à la fin d'une composition de , donc le nombre de compositions de n vérifie . De plus, (la composition vide), (la composition (1)), ce qui montre la relation.
Dénombrements de suites de pile ou face
Fn+2 est égal au nombre de jeux de pile ou face de longueur n qui ne contiennent pas 2 "pile" consécutifs.
Démonstration : pour former un jeu de longueur n qui ne contient pas 2 "pile" consécutifs on peut commencer par 0, et continuer avec un jeu de longueur n – 1 du même type, soit commencer par 1, 0 et continuer avec un jeu de longueur n – 2 du même type, donc le nombre de tels jeux vérifie ; De plus, ( jeu de longueur nulle), ((1) et (0)), ce qui montre la relation.
On en déduit que Fn+2 est aussi le nombre de parties de ne contenant pas 2 entiers consécutifs.
Le calcul des nombres de Fibonacci est souvent donné en exemple pour introduire des notions d'algorithmique, comme dans le chapitre 0 du livre Algorithms de Dasgupta et al.[14] ou alors dans le problème 31.3 laissé en exercice dans Introduction à l'algorithmique de Cormen et al.[15] ou l'exercice 2 de la section 1.2.8 de TAOCP, qui est précisément consacrée aux nombres de Fibonacci.
Avec la formule de Binet
Calculer les nombres de Fibonacci à partir du nombre d'or est une possibilité très pratique. Néanmoins, la précision de calcul de la racine carrée génère des erreurs d'arrondis pour des valeurs assez grandes dépendant du système utilisé[16]. En général, on obtient les bonnes valeurs jusqu’à F71 = 308 061 521 170 129, sur ordinateur ou sur calculatrice.
Notons[réf. nécessaire] qu’au-delà de F79, les calculs dépassent les possibilités de calcul en notation entière, et sont alors représentés en notation scientifique. Les premiers chiffres significatifs sont alors de nouveau bien représentés par cette formule.
Détail d’un exemple d'application faisable à partir d'une calculatrice : calcul de F50.
Le nombre d’or vaut et d'après la formule de Binet, est l'entier le plus proche du réel , qui le dépasse à peine. Compte tenu de l'ordre de grandeur de ce réel, le théorème des accroissements finis permet de s'assurer que pour le calculer à 0,5 près par défaut, 1,618 033 988 749 89 est une approximation suffisante de φ.
On trouve que le réel (1,618 033 988 749 89)50/√5 est à peine inférieur à l'entier 12 586 269 025, d'où
- ,
si bien que
- .
Algorithme récursif naïf
Voici la mise en œuvre récursive naïve qui suit la définition de la suite de Fibonacci.
// entrée : un nombre entier n // sortie : le terme de rang n de la suite de Fibonacci fonction fib(n) si n = 0 renvoyer 0 sinon si n = 1 renvoyer 1 sinon renvoyer fib(n - 1) + fib(n - 2)
Ce n'est cependant pas une façon judicieuse de calculer la suite de Fibonacci, car on calcule de nombreuses fois les mêmes valeurs. Le temps de calcul est exponentiel en n, à moins d'employer une technique de mémoïsation.
Algorithme polynomial
On calcule le n-ième terme de la suite de Fibonacci en mémorisant deux termes consécutifs de la suite. On commence avec les deux premières valeurs a = 0 et b = 1, puis on remplace répétitivement le premier nombre par le second, et le second nombre par la somme des deux.
fonction fib(n) (a, b) ← (0, 1) pour i de 1 à n (a, b) ← (b, a + b) renvoyer a
L'algorithme réalise n additions. On peut montrer que le n-ième terme de la suite de Fibonacci s'écrit avec O(n) bits. Comme l'addition de deux nombres sur n bits est linéaire en n, l'algorithme est en O(n2)[14]. De manière équivalente à l'algorithme ci-dessus, on peut écrire une fonction récursive terminale, c'est-à-dire où la dernière opération effectuée par la fonction est un appel récursif. Voici un algorithme récursif terminal[17] pour calculer la suite de Fibonacci.
fonction fib(n, a, b) si n = 0 renvoyer a sinon si n = 1 renvoyer b sinon renvoyer fib(n - 1, b, a + b)
L'appel à fib(n, 0, 1)
lance le calcul pour la valeur de n
donnée. Les paramètres a
et b
sont des accumulateurs : la valeur de a
est Fn et celle de b
est Fn + 1. Le temps de calcul est à chaque fois proportionnel à n. Par contre, l'espace mémoire occupé n'est a priori plus constant. Pour les langages qui réalisent l'optimisation d'élimination de la récursivité terminale, la mémoire occupée est constante.
Algorithme corécursif
En Haskell, on peut définir la suite de Fibonacci comme un stream (une liste infinie qui est évaluée de façon paresseuse[18])[19].
fibs = 0:1:zipWith (+) fibs (tail fibs)
Le calcul du n-ième terme s'effectue avec :
fibs !! n
Algorithme avec expression matricielle
Comme vu ci-dessus,, on écrit un algorithme qui utilise l'exponentiation rapide pour calculer , afin d'en déduire le n-ième terme. Si on considère les additions et multiplications de nombres comme des opérations élémentaires, en coût constant, l'algorithme est logarithmique en n. En comptabilisant la complexité des additions et multiplications, on peut montrer que la complexité de cet algorithme est en O(M(n) log n), et même O(M(n)), où M(n) est la complexité de l'algorithme utilisée pour réaliser une multiplication de deux nombres sur n bits (voir exercice 0.4 dans [14]).