DEV Community

Tom Moulard
Tom Moulard

Posted on • Originally published at blog.moulard.org on

Fibonacci et Phi

Fibonacci et $\phi$

En tant qu’utilisateur de Youtube, je suis récemment tombé sur la vidéoThe Infinite Pattern That Never Repeatspar Veritasium. Et à un moment, (précisément 14:55), il explique la relation entre la suite de Fibonacci et le golden ratio.

The ratio of one fibonacci number to the previous one approaches the golden ratio

Derek Muller

Mais ne serait-ce pas quelque chose que nous pourrions observer simplement avec un peut de python ?

Python

Il décidé d’écrire la fonction fibo qui afficherais les n premières valeurs de la suite:

def fibo(n):
    print(1)
    prev = 1
    actual = 1
    for i in range(n):
        print(actual)
        tmp = actual
        actual += prev
        prev = tmp

Enter fullscreen mode Exit fullscreen mode

Si on essaye avec 5, on se retrouve avec:

>>> fibo(5)
1
1
2
3
5
8

Enter fullscreen mode Exit fullscreen mode

Maintenant, ajoutons un paramètre supplémentaire qui va permettre d’effectuer un rapport entre les deux dernières valeurs et en afficher le résultat:

def fibo(n, f=lambda p, r: p / r):
    print(f"i: 0, f: 1, r: {f(0, 1)}")
    prev = 1
    actual = 1
    for i in range(n):
        print(f"i: {i}, f: {actual}, r: {f(actual, prev)}")
        tmp = actual
        actual += prev
        prev = tmp

Enter fullscreen mode Exit fullscreen mode

Si on essaye avec 5 et la fonction qui permet de faire le rapport entre les deux, on obtient:

>>> fibo(5)
i: 0, f: 1, r: 0.0
i: 0, f: 1, r: 1.0
i: 1, f: 2, r: 2.0
i: 2, f: 3, r: 1.5
i: 3, f: 5, r: 1.6666666666666667
i: 4, f: 8, r: 1.6

Enter fullscreen mode Exit fullscreen mode

On peut observer que l’on se rapproche de la valeur de $\phi$ qui vaut $\phi \approx 1.6180339887…$. On peut d’ailleurs l’approximer facilement:

>>> (1 + 5 ** 0.5) / 2
1.618033988749895

Enter fullscreen mode Exit fullscreen mode

D’autre part, si on utilise la fonction que j’ai écrite, on peut observer que le résultat converge vers $\phi$ rapidement mais qu’il faut attendre la 39 ième itération avant de voir la version arrondie de python:

>>> fibo(40, f=lambda a,b: a/b)
i: 0, f: 1, r: 0.0
i: 0, f: 1, r: 1.0
i: 1, f: 2, r: 2.0
i: 2, f: 3, r: 1.5
i: 3, f: 5, r: 1.6666666666666667
i: 4, f: 8, r: 1.6
i: 5, f: 13, r: 1.625
i: 6, f: 21, r: 1.6153846153846154
i: 7, f: 34, r: 1.619047619047619
i: 8, f: 55, r: 1.6176470588235294
i: 9, f: 89, r: 1.6181818181818182
i: 10, f: 144, r: 1.6179775280898876
i: 11, f: 233, r: 1.6180555555555556
i: 12, f: 377, r: 1.6180257510729614
i: 13, f: 610, r: 1.6180371352785146
i: 14, f: 987, r: 1.618032786885246
i: 15, f: 1597, r: 1.618034447821682
i: 16, f: 2584, r: 1.6180338134001253
i: 17, f: 4181, r: 1.618034055727554
i: 18, f: 6765, r: 1.6180339631667064
i: 19, f: 10946, r: 1.6180339985218033
i: 20, f: 17711, r: 1.618033985017358
i: 21, f: 28657, r: 1.6180339901755971
i: 22, f: 46368, r: 1.618033988205325
i: 23, f: 75025, r: 1.618033988957902
i: 24, f: 121393, r: 1.6180339886704431
i: 25, f: 196418, r: 1.6180339887802426
i: 26, f: 317811, r: 1.618033988738303
i: 27, f: 514229, r: 1.6180339887543225
i: 28, f: 832040, r: 1.6180339887482036
i: 29, f: 1346269, r: 1.6180339887505408
i: 30, f: 2178309, r: 1.6180339887496482
i: 31, f: 3524578, r: 1.618033988749989
i: 32, f: 5702887, r: 1.618033988749859
i: 33, f: 9227465, r: 1.6180339887499087
i: 34, f: 14930352, r: 1.6180339887498896
i: 35, f: 24157817, r: 1.618033988749897
i: 36, f: 39088169, r: 1.618033988749894
i: 37, f: 63245986, r: 1.6180339887498951
i: 38, f: 102334155, r: 1.6180339887498947
i: 39, f: 165580141, r: 1.618033988749895
i: 40, f: 267914296, r: 1.618033988749895

Enter fullscreen mode Exit fullscreen mode

Courbe de l'évolution des valeurs

Top comments (0)