2017-08-26 5 views
0

Q. Étant donné un nombre entier positif num, renvoyez la somme de tous les nombres Fibonacci impairs inférieurs ou égaux à num.Pourquoi ma somme de nombres de Fibonacci impairs donne-t-elle un résultat incorrect?

Ma solution.

function sumFiboOdds(num) { 
 
    var fib = [0, 1]; 
 

 
    function searchFibo(i, limit) { 
 
    if (i > limit) { 
 
     return; 
 
    } 
 
    fib[i] = fib[i - 2] + fib[i - 1]; 
 
    searchFibo(i + 1, limit); 
 
    } 
 

 
    searchFibo(2, num); 
 
    return fib; 
 
} 
 

 
var res = sumFiboOdds(1000); //"num" 
 

 
var sum = 0; 
 
for (var i = 1; i < res.length; i++) { 
 
    if (res[i] % 2 !== 0) { 
 
    sum += res[i]; 
 
    } 
 
} 
 

 
console.log(sum); //answer is 11708364174233842, should be 1785!!

Un indice? Peut-être que c'est vendredi mais je ne comprends pas?

+0

Le numéro 18 fibonacci est 1597: impair et au-dessus de 1000. Vous font la somme de tous les nombres impairs dans les 1000 premiers nombres. Pas de nombres <= 1000. – illiteratecoder

+0

si vous voulez impressionner avec javascript moderne - https://jsfiddle.net/jaromanda/jh61fmwk/: p –

Répondre

1

Le problème est que vous recueillez les 1000 premiers nombres de Fibonacci au lieu de chiffres seulement jusqu'à 1000.

function sumFiboOdds(limit) { 
 
    var fib = [0,1]; 
 

 
    function searchFibo(i) { 
 
    var next = fib[i-2]+fib[i-1]; 
 
    if(next > limit) { 
 
     return; 
 
    } 
 
    fib[i]=next; 
 
    searchFibo(i+1); 
 
    } 
 

 
    searchFibo(2); 
 
    return fib; 
 
} 
 

 
var res = sumFiboOdds(1000); 
 

 
var sum = res.reduce((s, n) => s + (n%2!==0 ? n : 0), 0); 
 

 
console.log(sum);