Dextre375
2023-07-05 18:16:37
La suite de Fibonacci est une suite connue, dont chaque terme est la somme des deux précédents :
0, 1, 1, 2, 3, 5, 8, 13, 21...
On peut coder cette suite de plusieurs manières dans le langage Python :
1/
def fibo_naif(i):
if i == 0:
return 0
if i == 1:
return 1
else:
return fibo_naif(i-2) + fibo_naif(i-1)
Si je veux calculer le 40ème terme, mon ordinateur me le donne en 28,7 secondes :
%time fibo_naif(40)
CPU times: user 28.6 s, sys: 110 ms, total: 28.7 s
Wall time: 28.7 s
2/
def fibo_malin(n):
elif n == 1:
return (0, 1)
else:
(a, b) = fibo_malin(n-1)
return (b, a+b)
Ici, si je veux calculer le 40ème terme, mon ordinateur me le donne en 44 microsecondes (ce qui est 652272 fois plus rapide que le calcul précédent) :
%time fibonacci(40)
CPU times: user 34 µs, sys: 10 µs, total: 44 µs
Wall time: 50.3 µs
En effet, lorsque je calcule fibo_naif(40), je calcule fibo_naif(38) + fibo_naif(39), puis fibo_naif(38) calcule fibo_naif(36)+fibo_naif(37) et fibo_naif(39) calcule fibo_naif(37) + fibo_naif(38), etc.
La fonction est appelée de l'ordre de 2^(40/2) fois, soit environ 1 million de fois.
Dans le deuxième cas, la fonction est appelée 39 fois.
Dextre375
2023-07-05 18:24:13
Le 05 juillet 2023 à 18:22:02 :
Le 05 juillet 2023 à 18:17:00 :
D'où l'importance de bien optimiser ses programmes.
je suis bien d'accord mais je comprends pas ce qu'on fait avec a+b
à la derniere ligne ?
a c'est fibo(n-2), b c'est fibo(n-1), donc b, a+b = fibo(n-1), fibo(n-2) + fibo(n-1) = fibo(n-1), fibo(n)
Je ne sais pas si c'est clair.
hxine
2023-07-05 18:25:31
Le 05 juillet 2023 à 18:24:13 :
Le 05 juillet 2023 à 18:22:02 :
Le 05 juillet 2023 à 18:17:00 :
D'où l'importance de bien optimiser ses programmes.
je suis bien d'accord mais je comprends pas ce qu'on fait avec a+b
à la derniere ligne ?
a c'est fibo(n-2), b c'est fibo(n-1), donc b, a+b = fibo(n-1), fibo(n-2) + fibo(n-1) = fibo(n-1), fibo(n)
Je ne sais pas si c'est clair.
oui j'ai compris après j'ai écris ça sans même réfléchir, moi les algos comme ça c'est impossible que ça me vienne en tête c'est beaucoup trop complexe franchement