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

偶数斐波那契数代码问题求助:实现结果与教程不符

你的代码存在的问题及修正方案

1. 未声明变量引发全局污染

代码中num = array[i - 2] + array[i - 1];里的num没有用let/const声明,会自动成为全局变量,不符合JS变量声明规范,容易引发意外的全局变量冲突。

2. 循环逻辑与常见教程需求不符(核心问题)

你的函数是生成前n项斐波那契数列后,求和其中的偶数项。但多数教程中,fiboEvenSum(n)的需求是求所有不超过n的偶数斐波那契数之和:

  • 调用fiboEvenSum(8)时,你的代码生成前8项斐波那契数[1,2,3,5,8,13,21,34],偶数项和为2+8+34=44
  • 如果教程需求是不超过8的偶数斐波那契数之和,正确结果应为2+8=10,这就导致结果不符。

修正后的代码

针对“前n项偶数和”的修正(解决变量声明问题)

function fiboEvenSum(n) {
  const array = [1, 2];
  let sum = 0;
  for (let i = 2; i < n; i++) {
    // 声明num变量
    const num = array[i - 2] + array[i - 1];
    array.push(num);
  }
  // 合并后两个循环,减少不必要的数组
  for (const num of array) {
    if (num % 2 === 0) {
      sum += num;
    }
  }
  return sum;
}
const al = fiboEvenSum(8)
console.log(al) // 输出44

针对“不超过n的偶数和”的修正(符合多数教程需求)

function fiboEvenSum(limit) {
  let sum = 0;
  let prev = 1;
  let curr = 2;
  // 循环条件改为当前斐波那契数不超过limit
  while (curr <= limit) {
    if (curr % 2 === 0) {
      sum += curr;
    }
    // 生成下一个斐波那契数
    const next = prev + curr;
    prev = curr;
    curr = next;
  }
  return sum;
}
const al = fiboEvenSum(8)
console.log(al) // 输出10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:10:22