求排查: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
逻辑说明
- 初始化
prev=0、curr=1(斐波那契序列的起始),sum=0用于存储累加结果。 - 循环判断当前斐波那契数
curr是否小于等于num:- 如果是奇数,直接加到
sum中。 - 生成下一个斐波那契数,更新
prev和curr的指针。
- 如果是奇数,直接加到
- 当
curr超过num时终止循环,返回sum。
这个逻辑会遍历每一个小于等于num的斐波那契数,确保不会遗漏任何符合条件的数,同时计算效率更高。
内容的提问来源于stack exchange,提问作者Yohance
相关产品推荐
相关产品推荐

