You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求排查:sumFibs(75025)未返回预期值135721的问题

问题分析

你的代码在处理sumFibs(75025)时出错的核心原因是循环条件的逻辑缺陷:你用while (f1 <= num && f2 <= num)控制循环,只有当两个斐波那契数都小于等于num时才执行循环体。当f2超过num但f1仍符合条件时(比如最后一次循环后f1=75025,f2=121393),循环直接终止,导致f1=75025这个奇数斐波那契数没有被计入总和。

另外,你的代码用数组存储所有符合条件的数再求和,其实可以直接累加,更高效。

修复方案

推荐采用逐个遍历斐波那契数的逻辑,避免成对处理带来的遗漏问题,同时直接累加结果节省内存:

function sumFibs(num) {
  let sum = 0;
  let prev = 0;
  let curr = 1;
  
  while (curr <= num) {
    // 仅累加奇数斐波那契数
    if (curr % 2 !== 0) {
      sum += curr;
    }
    // 生成下一个斐波那契数
    const next = prev + curr;
    prev = curr;
    curr = next;
  }
  
  return sum;
}

console.log(sumFibs(75025)); // 输出135721
逻辑说明
  1. 初始化prev=0、curr=1(斐波那契序列的起始),sum=0用于存储累加结果。
  2. 循环判断当前斐波那契数curr是否小于等于num:
    • 如果是奇数,直接加到sum中。
    • 生成下一个斐波那契数,更新prev和curr的指针。
  3. 当curr超过num时终止循环,返回sum。

这个逻辑会遍历每一个小于等于num的斐波那契数,确保不会遗漏任何符合条件的数,同时计算效率更高。

内容的提问来源于stack exchange,提问作者Yohance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:35:46