2017-08-26 18 views
0

問:給定正整數num,返回小於或等於num的所有奇數斐波那契數的和。爲什麼我的奇數斐波那契數的總和不正確?

我的解決方案。

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!!

任何線索?也許這是星期五,但我沒有得到它?!

+0

第18期Fibonacci數爲1597:奇數和以上1000。正在總結前1000個數字中的所有奇數。不是數字<= 1000. – illiteratecoder

+0

如果你想用現代的JavaScript打動人心 - https://jsfiddle.net/jaromanda/jh61fmwk/:p –

回答

1

的問題是,你正在收集第1000張斐波那契數,而不是隻數高達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);