Nombres pairs de Fibonacci - Exercice corrigé en JavaScript
Problème :
Chaque nouveau terme de la séquence de Fibonacci est généré en ajoutant les deux termes précédents. En commençant par 1 et 2, les 10 premiers termes seront :1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
En considérant les termes de la séquence de Fibonacci dont les valeurs ne dépassent pas n, trouvez la somme des termes pairs.
Solution:
Etape 1 : Nombre de Fibonacci
Chaque nouveau terme de la séquence de Fibonacci est généré en ajoutant les deux termes précédents. En commençant par 1 et 2, les 10 premiers termes seront :D'après cette explication, notre fonction de Fibonacci retourne la somme des deux termes précédent donc :
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
fib3 = fib2 + fib1
fib1 = 1 fib2 = 2
function fibonacci(n){ if(n <= 0) return 0; let fib1 = 1, fib2 = 2, fibn = 2; for(let i=2; i < n; i++){ fibn = fib2 + fib1 fib1 = fib2 fib2 = fibn } return fibn }
Etape 2 : La somme des termes paires
En considérant les termes de la séquence de Fibonacci dont les valeurs ne dépassent pas n, trouvez la somme des termes pairs.On nous fait comprendre que les valeurs de la séquences de Fibonacci ne doivent pas dépasser n (le nombre dont nous souhaitons connaitre la somme de Fibonacci). En modifiant notre fonction précédente, on a:
function fiboEvenSum(n){
if(n <= 0) return 0;
let fib1 = 1,
fib2 = 2,
fibn = 2;
for(let i=2; i < n; i++){
if(fibn > n) break // Arrêter la boucle dès qu'une valeur dépasse n
fibn = fib2 + fib1
fib1 = fib2
fib2 = fibn
}
return fibn
}
function fiboEvenSum(n){ if(n <= 0) return 0; let sum = 0 let fib1 = 1, fib2 = 2, fibn = 2; for(let i=2; i < n; i++){ if(fibn > n) break // Arrêter la boucle dès qu'une valeur dépasse n if(fibn%2==0) sum +=fibn fibn = fib2 + fib1 fib1 = fib2 fib2 = fibn } return sum }
La ligne
if(fibn%2==0) sum +=fibn
est placé au dessus de la ligne
fibn = fib2 + fib1
pour nous empêcher de sommer un terme impair ou supérieur à n !
Etape 3 : Optimiser le code
Maintenant que notre programme résout le problème posé, il est temps de le rendre optimal. Pour ce problème, nous allons utiliser la destructuration. Cela nous permettra de nous passer de la variable fib2
et de simplifier la taille de notre code !
De plus, nous pouvons modifier la boucle for
de façon à élimer la ligne if(fibn > n) break
function fiboEvenSum(n){ if(n <= 0) return 0; let sum = 0, fib1 = 1, fibn = 2; for(let i=2; fibn < n; i++){ if(fibn%2==0) sum +=fibn [fib1, fibn] = [fibn, fib1 + fibn] } return sum }