基本JavaScript算法,Fibonacci系列

时间:2015-09-29 22:56:53

标签: javascript algorithm math

将斐波那契数列的所有奇数加起来并包括给定的数字。

我无法弄清楚我遇到的问题的语法。问题,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);

3 个答案:

答案 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);
} 

看看我的尝试: http://jsfiddle.net/copet80/xejz4ka2/

答案 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斐波纳契数。