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

使用For Loop实现斐波那契数列:为何range()中需用n-1?

为什么这段斐波那契代码里要用range(n-1)?

先明确这段代码的斐波那契数定义:

  • 第0个斐波那契数是0(调用fib_linear(0)返回0)
  • 第1个斐波那契数是1(调用fib_linear(1)返回1)
  • 第2个及以后的数,等于前两个数的和

再看代码的初始状态:
previousFib = 0(对应第0个斐波那契数),currentFib = 1(对应第1个斐波那契数)——这时候我们已经拿到了第1个目标数。

接下来要得到第n个斐波那契数,需要从当前的第1个数开始,一步步往后推导:

  • 要得到第2个斐波那契数:只需要计算1次(0+1),对应循环1次,也就是range(1),而n=2时n-1=1
  • 要得到第3个斐波那契数:需要计算2次(先得到第2个数1,再得到第3个数1+1=2),对应循环2次,也就是range(2),n=3时n-1=2
  • 以此类推,要得到第n个斐波那契数,总共需要从第1个数往后迭代n-1次——因为初始已经站在第1个数的位置,每循环一次就往后推进一个数,循环n-1次后,currentFib就会变成第n个斐波那契数

举个具体例子验证:
当n=4时,range(4-1)=range(3),循环执行3次:

  1. 第一次循环:newFib = 0 + 1 = 1 → previousFib = 1,currentFib = 1(此时currentFib是第2个斐波那契数)
  2. 第二次循环:newFib = 1 + 1 = 2 → previousFib = 1,currentFib = 2(此时currentFib是第3个斐波那契数)
  3. 第三次循环:newFib = 1 + 2 = 3 → previousFib = 2,currentFib = 3(此时currentFib是第4个斐波那契数)
    循环结束后返回3,正好是预期的第4个斐波那契数。

总结一下:初始状态已经持有第1个斐波那契数,要拿到第n个,需要额外迭代n-1次,所以用range(n-1)来控制循环的次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:37:33