否则if语句对我来说似乎是合理的,但会破坏代码

Else if statement seems rational to me but breaks code

本文关键字:代码 语句 if 对我来说 似乎是 否则      更新时间:2023-09-26

我正在努力的挑战:

和所有奇数斐波那契数

给定一个正整数num,返回小于等于num的所有奇数Fibonacci数的和。

斐波那契数列的前两个数是1和1。数列中每增加一个数都是前两个数的和。斐波那契数列的前六个数字分别是1、1、2、3、5和8。

例如,sumFibs(10)应该返回10,因为所有小于10的斐波那契奇数都是1,1,3和5。

,

sumFibs(1000)应该返回1785。

sumFibs(4000000)应该返回4613732.

sumFibs(4)应该返回5.

这是我的工作:

function sumFibs(num) {
if (num === 1) {return 1;}
var fibList = [1, 1];
for(i=2; i < num; i++){
    if (fibList[i-1] + fibList[i-2] > num){
        break;
    }
    //else if ((fibList[i-1] + fibList[i-2])%2 !== 0){
    fibList.push(fibList[i-1] + fibList[i-2]);
    //}
}
return fibList.reduce(function(a, b){return a+b;});
}

它给出了斐波那契数列的和,包括偶数和奇数,直到小于或等于输入的数字。

然而,挑战的一部分是只把奇数加起来。起初,我以为这很容易,但我最大的努力都失败了。我的代码中不能工作的部分被注释掉了。任何等于或大于等于4的输入结果为"NaN"。

有人能帮忙吗?非常感谢。

如果你只想求和奇数斐波那契数,那么你可以调整你在reduce中使用的lambda来反映这一点。

function sumFibs(num) {
    if (num === 1) {return 1;}
    var fibList = [1, 1];
    for(i=2; i < num; i++){
        if (fibList[i-1] + fibList[i-2] > num){
            break;
        }
        fibList.push(fibList[i-1] + fibList[i-2]);
    }
    return fibList.reduce(function(a, b){
        return a + b%2 * b;
    });
}

注释代码不能工作的原因是为了首先计算斐波那契数,您必须跟踪所有,而不仅仅是奇数。例如,要得到5,您必须计算2 + 3,这只有在您首先记录了2时才能做到。

你得到NaN而不是其他错误的数字的原因是你的循环期望fibList[i - 1]被一个实数填充。i每次迭代都加1,但数组并不总是得到一个新元素。在某种意义上,i超出了数组的大小,所以加法操作数不是实数的和。