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

JavaScript斐波那契生成器变量赋值问题求助

问题分析与修复

核心问题

你代码里的变量初始化逻辑完全错误:

  • 你在output还是空数组的时候就定义了lastNumber、nPrev、newNumber,这时候output[output.length-1]等价于output[-1],结果是undefined,两个undefined相加得到NaN。
  • 更关键的是,这些变量只在函数开头计算了一次,循环里不会随着output的更新重新计算新数值,导致你反复push的都是一开始就错的NaN。

修复后的代码

把计算新数值的逻辑放到循环内部,每次循环都基于当前output的最后两个元素计算新值:

function fibonacciGenerator(n) {
  var output = [];

  if (n === 1) {
    output = [0];
  } else if (n === 2) {
    output = [0, 1];
  } else {
    output = [0, 1];
    for (var i = 2; i < n; i++) {
      // 每次循环都重新获取当前最后两个数计算新值
      var lastNumber = output[output.length - 1];
      var nPrev = output[output.length - 2];
      var newNumber = lastNumber + nPrev;
      output.push(newNumber);
    }
  }
  return output;
}

console.log(fibonacciGenerator(5)); // 输出 [0, 1, 1, 2, 3]

优化版(避免重复取数组元素)

如果不想每次都从数组里取元素,可以用两个变量跟踪最后两个值,效率更高:

function fibonacciGenerator(n) {
  if (n === 1) return [0];
  if (n === 2) return [0, 1];

  const output = [0, 1];
  let prev = 0;
  let curr = 1;
  
  for (let i = 2; i < n; i++) {
    const next = prev + curr;
    output.push(next);
    prev = curr;
    curr = next;
  }
  
  return output;
}

console.log(fibonacciGenerator(5)); // 输出 [0, 1, 1, 2, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:35:18