簡體   English   中英

如何在javaScript中獲得所有奇數斐波那契值的總和?

[英]How can I get the sum of all odd fibonacci vales in javaScript?

我正在完成此“ 免費代碼營”練習

如果是斐波那契數,則返回所有奇數斐波那契數的和,直到並包括已通過的數字。 斐波那契數列的前幾個數字是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;
}

我得到的所有信息都是undefined ,這似乎很奇怪,因為我認為代碼的這一部分非常酷-使用函數值檢查if語句中的vs。

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

祝好運。 作為完成了大部分課程的人,我可以說Free Code Camp是真正的交易。

您的位置非常接近,其他答案也很適合將您推向正確的方向,我將發布使用本地JS函數執行此操作的另一種方法:

JSBin中以下代碼的示例

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;
}
  1. 您可以先定義前一個數字,當前數字和總斐波那契數的變量

  2. 要檢查奇數,可以使用if語句並使用%:

    if(currNum%2!== 0){}

  3. 如果當前數字為奇數,則將其添加到總數中

    fibTotal + = currNumber;

  4. 要確定您的下一個斐波那契編號,您需要添加上一個和當前編號:

    var nextNumber = prevNumber + currNumber;

  5. 您需要將之前的號碼更新為當前號碼

    prevNumber = currNumber;

  6. 將當前編號設置為序列中的下一個斐波那契編號

    currNumber = nextNumber;

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM