Nombres de Fibonacci

Les nombres de Fibonacci sont issus d'un problème posé par Leonard de Pise dit Fibonacci (vers 1200)
sur la croissance d'une population de lapins.
En partant d'un couple de lapin, et en supposant que chaque couple d'une génération produise un couple
pour la génération suivante, et un couple pour la génération qui suit, puis meurt.
Le nombre de couples de lapin est alors :
1,2,3,5,8,13, .... donné par la relation de récurence :
F
n+1=F
n+F
n-1, avec F
0=1 et F
1=2
En partant de 1,1, il vient d'ailleurs la même suite : 1,1,2,3,...
ou de 0,1, qui donne 0,1,1,2,3,...
Par contre en partant de 2,1 on obtient des nombres du même genre, mais différents, appelés nombres de Lucas Ln:
2,1,3,4,7,11,18,...
Quelques propriétés
F
0+F
1+F
2+...+F
n = F
n+2 - 1
F
n+1 = C
0n + C
1n-1 + C
2n-2 +...
(Les nombres de Fibonnaci sont la somme des diagonales du triangle de Pascal)
L
n = F
n+1 + F
n-1
F
2n = F
n(F
n+1 + F
n-1) = F
nL
n =
F
n² + 2F
nF
n-1 = F
n+1² + F
n-1²
F
2n+1 = F
n² + F
n+1²
2F
m+n = F
mL
n + F
nL
m
F
m+n = F
m-1F
n + F
mF
n-1
lim F
n+1/F
n = (1+√5)/2 = φ
Calcul
La formule de récurrence donne la suite des nombres de Fibonacci, certes...
Mais pour calculer le millionième nombre de Fibonacci ?
La résolution de la récurence linéaire donne la formule de Binet :
En appelant π =
(1+√
5)/2 le nombre d'or et φ' = -1/φ = (1-√
5)/2 son conjugué :
et comme |φ'| < 0.5, Fn est l'entier le plus proche de φn/√5
Une méthode récursive pour calculer Fn en O(log(n)),
à partir des F2n-1 et F2n en fonction des Fn et Fn-1 :
Ce sous programme récursif retournant (Fn-1, Fn)
fibo (n) :
si n = 0 : retour (1, 0)
sinon :
k = partie entière de n/2
(fk1, fk) = fibo(k)
si n pair : retour (fk² + fk1², fk² + 2*fk*fk1)
sinon : retour (fk² + 2*fk*fk1, fk² + (fk + fk1)²);