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

如何实现斐波那契规则函数?输入序号返回对应斐波那契数值

修复斐波那契函数的问题

你的代码出现NaN的核心问题有两个:

  • 数组arr被放在for循环内部,每次迭代都会重新初始化为[0,1,1],之前计算的结果完全无法保留
  • 当i增长到3时,初始数组没有索引3的元素,arr[i]会返回undefined,和前一个数相加自然得到NaN

修复后的数组实现版本

把数组初始化移到循环外,同时处理边界情况,就能得到正确结果:

const fibonacci = function(num) {
  // 初始化斐波那契序列前两位
  const arr = [1, 1];
  
  // 输入1或2时直接返回1
  if (num === 1 || num === 2) {
    return 1;
  }
  
  // 从第3位开始循环计算到第num位
  for (let i = 2; i < num; i++) {
    const nextNum = arr[i - 1] + arr[i - 2];
    arr.push(nextNum);
  }
  
  // 数组索引从0开始,第num位对应索引num-1
  return arr[num - 1];
};

// 测试验证
console.log(fibonacci(4)); // 输出3
console.log(fibonacci(10)); // 输出55
console.log(fibonacci(12)); // 输出144
console.log(fibonacci(45)); // 输出1134903170

优化版(无需数组,节省内存)

如果不需要保存整个序列,只用两个变量存储前两位数值即可,空间复杂度更低:

const fibonacci = function(num) {
  if (num === 1 || num === 2) {
    return 1;
  }
  
  let prevPrev = 1; // 记录第n-2位数值
  let prev = 1; // 记录第n-1位数值
  let current;
  
  for (let i = 3; i <= num; i++) {
    current = prevPrev + prev;
    prevPrev = prev;
    prev = current;
  }
  
  return current;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:23:19