将斐波那契数列的所有奇数加起来并包括给定的数字。
我无法弄清楚我遇到的问题的语法。问题,for循环,当它大于或等于num
的值时结束,而我希望它以start
的生成值结束。
有没有办法让它发挥作用?
function sumFibs(num) {
var odd = [1]; // Odd numbers of the Fibonacci series
var start = [0,1]; // Fibonacci series
// Generating the series and filtering out the odd numbers
for(i=1;i<num;i++) {
var sum = 0;
sum = start[i] + start[i-1];
start.push(sum);
if(sum%2 != 0) {
odd.push(sum);
}
}
// Generating sum of the odd numbers
var main = 0; // sum of the odd numbers
for(i=0;i<odd.length;i++) {
main += odd[i]
}
console.log(start);console.log(odd);return main
}
sumFibs(4);
答案 0 :(得分:0)
如果我理解正确的话应该是这样的
while(start.length<num)
{
your code will be here
}
答案 1 :(得分:0)
不是使用两个数组,也许它不会混淆使用一个数组并使用Array.prototype.reduce只对奇数值求和。
function sumFibs(num) {
var fib = [0, 1];
var sum = 0;
var i = 2;
while (true) {
sum = fib[i-2] + fib[i-1];
if (sum > num) {
break;
}
fib.push(sum);
i++;
}
return fib.reduce(function(v0, v) {
return v0 + (v % 2 === 0 ? 0 : v);
}, 0);
}
答案 2 :(得分:0)
这不是项目欧拉问题吗? 如果我理解问题,那么你的问题就在for循环中。更具体的条件。在你的情况下,for循环将重复多次,如果num为-1,因为你从i = 1开始并且i&lt; NUM。所以在你的情况下,如果我理解问题的话,它会重复12次并达到比13更高的数字。
首先,我是一个初学者,但我被教导你使用for循环,如果你知道有多少次必须重复。在这种情况下,您不知道有多少次必须重复for循环,因为您不知道何时达到13号。
在这种情况下,我认为while循环会更好,并为您设置数字条件。例如:
while(sum<=num){}
或者像我之前的somone说:
while (true){
if(sum<num){
break;
}
如果SUM超过13,这2个代码将结束。我相信你不希望Fibonaci数量超过13.在这种情况下你必须做出其他条件,但我感觉它的项目euler我不会在这里给出答案。< / p>
再次。如果fib数超过13,你有循环条件结束。你的代码寻找13-1斐波纳契数。