繁体   English   中英

算法脚本:对所有奇数斐波那契数求和

[英]Algorithm Scripting: Sum All Odd Fibonacci Numbers

我正在尝试解决这个问题。

" 给定一个正数 integer num,返回所有小于或等于 num 的奇数斐波那契数的总和。

斐波那契数列中的前两个数是 1 和 1。数列中的每个附加数都是前两个数的和。 斐波那契数列的前六个数字是 1、1、2、3、5 和 8。

例如,sumFibs(10) 应该返回 10,因为所有小于或等于 10 的奇数斐波那契数都是 1、1、3 和 5。”

这是我的解决方案,我只是不明白为什么它满足除最后一个之外的所有陈述。 我找不到错误。 我将不胜感激任何帮助!

function sumFibs(num) {
  if(num === 1){
    return 1;
  }else if(num ===2){
    return 2;
  }

let arr=[1,1],
curr =1,
prev =1;

for(let i = 2; i<num;i++){
  let next = curr + prev;
  prev = curr;
  curr= next;
  
  if(curr<num && curr%2!==0){
      arr.push(curr);    
  }
}

   return arr.reduce((a,b)=>a+b);
}

console.log(sumFibs(75024));
console.log(sumFibs(75025));

即使它们应该不同,它也给了我相同的结果。

在此处输入图像描述

您应该添加“小于或等于 num”的数字。 您只对数字 < num 求和。

错误似乎是条件语句if(curr<num && curr%2!==0)不满足上面的说明,说明如下:返回小于或等于的所有奇数斐波那契数的总和数

因此,当我们使用if(curr<num && curr%2!==0)作为条件语句时,我们不包括 75025,因为它不代表小于变量 num 的数字。

这就是我们发现错误的地方。 它应该包括不仅小于而且等于num的数字,在这种情况下num是 75025,由于不正确的条件语句,它没有被包括在要总结的奇数斐波那契数组中。

您只考虑小于 num 的数字,但任务描述说小于或等于。 1 的基本情况也是错误的。 实际上,您一开始并不需要基本案例。 而不是 for 循环,您应该使用 while 循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM