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

如何获得javaScript中所有奇数斐波那契值的总和?,javascript,fibonacci,Javascript,Fibonacci,我正在努力解决这个问题 返回所有奇数斐波那契数之和,包括 如果是斐波那契数,则为已传递数。斐波那契序列的前几个数是1,1,2,3,5和 8,随后的每个数都是前两个数的和 这是我到目前为止所拥有的 有什么建议吗 function sumFibs(num) { var arr, isFibVal, isEvenVal, sum, i = 0, fibonacci = function (num){ var a, b, result, fibArr = [1]; a

我正在努力解决这个问题

返回所有奇数斐波那契数之和,包括 如果是斐波那契数,则为已传递数。斐波那契序列的前几个数是1,1,2,3,5和 8,随后的每个数都是前两个数的和

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

有什么建议吗

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;
}

我不会直接给你答案,因为你要通过FCC,但我会给你一些提示,让你看看哪里:

见本节:

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

祝你好运。作为一个已经完成了大量课程的人,我可以说这是真正的交易。

我不会直接给你答案,因为你要通过FCC,但我会给你一些提示,告诉你去哪里找:

见本节:

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

祝你好运。作为一个已经完成了大量课程的人,我可以说这是真正的交易。

你非常接近,另一个答案很好地推动了你朝着正确的方向前进,我将发布一种使用本机JS函数的不同方式:

函数fibs(n){
var f=[0,1];
var extraNumber=0;
对于(变量i=0;i-1){
额外数量=n;
}
console.log(f);//只是为了检查一下,我们可以稍后剪切所有日志。。。
var filtered=f.filter(函数(num){
//过滤掉偶数
返回数值%2==1;
});
console.log(过滤);
var sum=过滤的.reduce(函数(a,b){
//把剩下的加起来
返回a+b;
});
控制台日志(总和);
返回和+额外数字;
}

你已经非常接近了,另一个答案很好地推动了你朝着正确的方向前进,我将发布一种使用本机JS函数实现这一点的不同方式:

函数fibs(n){
var f=[0,1];
var extraNumber=0;
对于(变量i=0;i-1){
额外数量=n;
}
console.log(f);//只是为了检查一下,我们可以稍后剪切所有日志。。。
var filtered=f.filter(函数(num){
//过滤掉偶数
返回数值%2==1;
});
console.log(过滤);
var sum=过滤的.reduce(函数(a,b){
//把剩下的加起来
返回a+b;
});
控制台日志(总和);
返回和+额外数字;
}
  • 您可以从定义前一个数、当前数和总斐波那契数的变量开始

  • 要检查奇数,可以使用if语句并使用%:

    如果(currNum%2!==0){}

  • 如果当前数字为奇数,则将其添加到总数中

    fibTotal+=电流数

  • 要确定下一个斐波那契数,您需要添加上一个和当前数:

    var nextNumber=prevNumber+currNumber

  • 您需要将以前的号码更新为当前号码

    prevNumber=currennumber

  • 将当前数字设置为序列中的下一个斐波那契数字

    currNumber=nextNumber

  • 希望这有帮助

  • 您可以从定义前一个数、当前数和总斐波那契数的变量开始

  • 要检查奇数,可以使用if语句并使用%:

    如果(currNum%2!==0){}

  • 如果当前数字为奇数,则将其添加到总数中

    fibTotal+=电流数

  • 要确定下一个斐波那契数,您需要添加上一个和当前数:

    var nextNumber=prevNumber+currNumber

  • 您需要将以前的号码更新为当前号码

    prevNumber=currennumber

  • 将当前数字设置为序列中的下一个斐波那契数字

    currNumber=nextNumber


  • 希望这能有所帮助。

    这是我的解决方案,我觉得它非常可读:

    function sumOddFibs(num) {
      // initialize with 2 because 
      // fib sequence starts with 1 and 1
      var sum = 2;
    
      var prev = 1;
      var curr = 1;
      var next = 2;
    
      while (next <= num) {
        prev = curr;
        curr = next;
        next = prev + curr;
    
        if (curr % 2 !== 0) {
          sum += curr;
        }
      }
      return sum;
    }
    
    函数sumOddFibs(num){
    //使用2初始化,因为
    //fib序列从1和1开始
    var总和=2;
    var-prev=1;
    var curr=1;
    var-next=2;
    
    而(下一步这是我的解决方案,我发现它非常可读:

    function sumOddFibs(num) {
      // initialize with 2 because 
      // fib sequence starts with 1 and 1
      var sum = 2;
    
      var prev = 1;
      var curr = 1;
      var next = 2;
    
      while (next <= num) {
        prev = curr;
        curr = next;
        next = prev + curr;
    
        if (curr % 2 !== 0) {
          sum += curr;
        }
      }
      return sum;
    }
    
    函数sumOddFibs(num){
    //使用2初始化,因为
    //fib序列从1和1开始
    var总和=2;
    var-prev=1;
    var curr=1;
    var-next=2;
    
    虽然(接下来感谢你的洞察力,所以前两个是不需要的?我知道你说三个中的最后一个可能根本不需要。至于免费代码夏令营,我最近真的很受鼓舞。起初我无法突破许多算法挑战,但到最近为止,我已经连胜了。前两个是我nts需要对逻辑进行一些编辑。就我而言,第三部分不是必需的。你可以将第三部分的逻辑应用到前两部分中,或者用一行代码替换该部分。是的,FCC很好。请记住,对于完全初学者来说,这有点困难。对于一个全新的人,我建议开始首先,谢谢你,我会坚持下去。:)我已经通过了codecademy之类的课程(琳达、codeschool等)我的问题是练习。就像学习一门口语一样,你必须开始练习所有有助于传达你想法的结构。因为我一直在练习,实际上打字的事情已经改变了…继续!这是一门有趣但富有挑战性的课程。你也提到了我为什么不简单地为你粘贴一个工作solu的原因调试。这是你自己需要练习思考的事情。调试是任何程序员的基本技能。感谢你的洞察力,所以前两个是不需要的?我知道你说最后三个可能根本不需要。至于免费代码营,我最近真的很受鼓舞。一开始我无法突破人类
    function fibs(n) {
      var f = [0, 1];
      var extraNumber = 0;
      for (var i = 0; i < n; i++) {
        f.push(f[f.length - 1] + f[f.length - 2]);
      }
      // lets check if the passed in number is a fib:
      if (f.indexOf(n) > -1) {
        extraNumber = n;
      }
      console.log(f); // just to check we can cut all the logs later...
    
      var filtered = f.filter(function(num) {
        // filter out the even numbers
        return num % 2 === 1;
      });
      console.log(filtered);
    
      var sum = filtered.reduce(function(a, b) {
        // add up whats left
        return a + b;
      });
      console.log(sum);
      return sum + extraNumber;
    }
    
    function sumOddFibs(num) {
      // initialize with 2 because 
      // fib sequence starts with 1 and 1
      var sum = 2;
    
      var prev = 1;
      var curr = 1;
      var next = 2;
    
      while (next <= num) {
        prev = curr;
        curr = next;
        next = prev + curr;
    
        if (curr % 2 !== 0) {
          sum += curr;
        }
      }
      return sum;
    }