簡體   English   中英

我需要對所有奇數斐波那契數字求和,但僅適用於某些數字

[英]I need to sum all odd fibonacci numbers but only works for some numbers

任務:給定一個正整數num,返回小於或等於num的所有奇數斐波納契數的總和。

斐波那契數列中的前兩個數字是1和1。序列中的每個其他數字是前兩個數字的總和。 斐波那契數列的前六個數字是1、1、2、3、5和8。

例如,sumFibs(10)應該返回10,因為所有小於10的奇數斐波那契數都是1、1、3和5。

這是在freecodecamp上。 我查看了一些示例,這些示例我知道可以輕松復制它們,但是我想編寫自己的代碼,有人可以解釋為什么我得到這些結果以及哪里出了問題嗎? 謝謝。

function sumFibs(num) {
  var arr = [0, 1, 1]; //array of fibonacci numbers
  var fin = 0; //variable for final number
  for(var i = 3;i < 35;i++)
    {
      arr[i] = arr[i-1] + arr[i-2];
    }
  // loop to make fibonacci numbers
  for(var x = 0; x < arr.length-1; x++)
    {
        if(arr[x] <= num  && (arr[x] % 2 === 0))
          {
          fin += arr[x];
          }//if to check if array of fibonacci numbers[x] is less than num && if it is odd
    }//loop to go through every fibonacci number
  return fin;
}
sumFibs(1000);

進行模運算時:

    if(arr[x] <= num  && (arr[x] % 2 === 0))

您在問兩件事:

  1. 如果arr [x]值小於數字(檢查)
  2. 如果arr [x]的值是偶數,則不是奇數。

那就是您發生問題的地方。

而是應該使用:

    if(arr[x] <= num  && (arr[x] % 2 != 0))

這是我的解決方案:

function sumFibs(num) 
{
    var prev=0,curr=1,result=0,added;
     while(curr<=num)
     {
         if(curr % 2 !=0)
         {
         result+=curr;
         }
         added= curr+prev;
         prev=curr;
         curr=added;
     }
    return result;
}
sumFibs(4);

試試這個

 function sumFibs(num) { var firstNum = 0; var secondNum = 1; var sequence = []; var index = []; while (firstNum <= num) { sequence.push(firstNum, secondNum); firstNum = firstNum + secondNum; secondNum = firstNum + secondNum; /**/ } for (var key in sequence) { if (sequence[key] <= num) { index.push(sequence[key]); }} //return index; var oddIndex = []; for (var key in index) { if (index[key] % 2 !== 0) { oddIndex.push(index[key]); } } // return oddIndex; var output = oddIndex.reduce(function(a,b){ return a+b; }); return output; } sumFibs(75025); //should return 135721 

暫無
暫無

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

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