2017-08-26 3 views
0

Q.正の整数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

までの代わりに数字だけの最初の1000のフィボナッチ数を集めているということである18日のフィボナッチ数は1597である:奇数とあなたは1000を超えます最初の1000の数字のすべての奇数を合計しています。番号が1000未満でない場合 – illiteratecoder

+0

現代のjavascriptで印象づけたい場合 - https://jsfiddle.net/jaromanda/jh61fmwk/:p –

答えて

1

問題は、あなたが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);

関連する問題