gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:42:53 26 4
gpt4 key购买 nike

我正在应对的挑战:

对所有奇数斐波那契数求和

给定一个正整数 num,返回所有小于或等于 num 的斐波那契奇数之和。

斐波那契数列中的前两个数字是 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 以反射(reflect)这一点。

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 每次迭代都会递增,但数组并不总是会获得新元素。从某种意义上说,i 超出了数组的大小,因此加法操作数不会对实数求和。

关于javascript - Else if 语句对我来说似乎是合理的,但会破坏代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com