[英]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))
您在問兩件事:
那就是您發生問題的地方。
而是應該使用:
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.