javascript - 如何在 javaScript 中获得所有奇数斐波那契值的总和?

标签 javascript fibonacci

我正在解决这个问题Free Code Camp exercise

Return the sum of all odd Fibonacci numbers up to and including the passed number if it is a Fibonacci number. The first few numbers of the Fibonacci sequence are 1, 1, 2, 3, 5 and 8, and each subsequent number is the sum of the previous two numbers.

这是我到目前为止所拥有的......

有什么建议吗?

function sumFibs(num) {
    var arr, isFibVal, isEvenVal, sum, i = 0, fibonacci = function (num){
      var a, b, result, fibArr = [1];
        a=0;
        b=1;
        result=b;

        for(var j = 0; j < num; j++){
            result = a + b;
            a = b;
            b = result;
            fibArr.push(result);

       }
      return fibArr;
    },

     isFib = function (val){
     var prev = 0;
     var curr = 1;
     while(prev<=val){
       if(prev == val){
         return true;
       } else {
         return false;
       }
       curr = prev + curr;
       prev = curr - prev;
     }
    },

   isEven = function(someNumber){
         return (someNumber % 2 === 0) ? true : false;
   };

    function sumArray(array) {
      for (
        var
          index = 0,              // The iterator
          length = array.length,  // Cache the array length
          sum = 0;                // The total amount
          index < length;         // The "for"-loop condition
          sum += array[index++]   // Add number on each iteration
      );
      return sum;
    }


      arr = fibonacci(num);
      isFibVal = isFib(num);
      isEvenVal = isEven(num);


    if (isFibVal && !isEvenVal){
        sum  += sumArray(arr);  
}
   return sum;
}

我得到的只是未定义,这似乎很奇怪,因为我认为这部分代码非常酷——使用函数值来检查与 if 语句中的比较。

  arr = fibonacci(num);
          isFibVal = isFib(num);
          isEvenVal = isEven(num);


    if (isFibVal && !isEvenVal){
        sum  += sumArray(arr);  
}

最佳答案

由于您正在通过 FCC,所以我不会直接给您答案,但我会为您提供一些关于在哪里查看的提示:

查看此片段:

for(var j = 0; j < num; j++){
    result = a + b;
    a = b;
    b = result;
    fibArr.push(result);
}

还有这个:

function sumArray(array) {
  for (
    var
      index = 0,              // The iterator
      length = array.length,  // Cache the array length
      sum = 0;                // The total amount
      index < length;         // The "for"-loop condition
      sum += array[index++]   // Add number on each iteration
  );
  return sum;
}

此外,您可能根本不需要此段:

isFibVal = isFib(num);
  isEvenVal = isEven(num);


if (isFibVal && !isEvenVal){
    sum  += sumArray(arr);  

祝你好运。作为一个已经完成大部分类(class)的人,我可以说 Free Code Camp是货真价实的。

关于javascript - 如何在 javaScript 中获得所有奇数斐波那契值的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36705648/

相关文章:

javascript - Javascript 中与语言无关的 slug

javascript - html 只读属性不可移除

javascript - 自定义 SharePoint 2013 日历日名称

带有许多参数的javascript ajax发送到php文件

javascript - 在其他选项卡上的一个 Web 浏览器实例中登录到应用程序

java - 带 BigIntegers 的斐波那契计算器

java - 斐波那契递归调用导致堆栈溢出

c++ - 斐波那契数列乘积之和

bash - 为什么这个带有 `while [expr]` 的 bash 脚本不会运行?

amazon-web-services - "Python"中的欧拉计划#2