我正在研究下面的Fibonacci数字问题:
给定正整数num,返回小于或等于num的所有奇数Fibonacci数的总和 . 例如,sumFibs(10)应该返回10,因为小于或等于10的所有奇数Fibonacci数都是1,1,3和5 .
sumFibs(1) should return a number.
sumFibs(1000) should return 1785.
sumFibs(4000000) should return 4613732.
sumFibs(4) should return 5.
sumFibs(75024) should return 60696.
sumFibs(75025) should return 135721.
以下是我的解决方案 . 我很困惑为什么当给定的整数num等于4000000时,我得到的总和总和,但其他输出都很好 . 谢谢 .
function FindFib(num){
if(num === 0)
return 0;
else if(num === 1)
return 1;
else
return FindFib(num-2) + FindFib(num-1);
}
function sumFibs(num) {
var total=0;
var fib=0;
for(var i =0;i<=num;i++){
fib = FindFib(i);
if(fib%2 === 1 && fib <= num)
total=total+fib;
}
return total;
}
console.log(sumFibs(400000));
1 回答
由于斐波那契数字很快变大,FindFib方法将无法工作 .
注意,如果第n个斐波纳契数大于任何数字X,则第n个第1个斐波那契数也大于X.考虑到这一点,我们可以在找到超过N的第一个斐波纳契数时停下来 .
所以我们可以重写
sumFibs
方法,您还可以通过迭代方法找到第n个斐波那契数,这很简单,
此外,您可以存储已计算的斐波纳契数,以避免大量重新计算,并节省内存和时间 .