任务:给定正整数num,返回小于或等于num的所有奇数Fibonacci数的总和。
Fibonacci序列中的前两个数字是1和1.序列中的每个附加数字是前两个数字的总和。 Fibonacci序列的前六个数字是1,1,2,3,5和8.
例如,sumFibs(10)应该返回10,因为小于10的所有奇数Fibonacci数都是1,1,3和5.
这是在freecodecamp上。我看过我知道我可以轻松复制它们的例子,但是我想编写自己的代码,有人可以解释为什么我会得到这些results以及我哪里出错了?感谢。
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);
答案 0 :(得分:2)
当您进行模运算时:
if(arr[x] <= num && (arr[x] % 2 === 0))
你问两件事:
这就是您的问题发生的地方。
相反,你应该使用:
if(arr[x] <= num && (arr[x] % 2 != 0))
答案 1 :(得分:1)
这是我的解决方案:
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);
答案 2 :(得分:1)
尝试一下
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