请问如何理解下述Python实现的斐波那契数列计算代码?
斐波那契数列Python代码逻辑讲解
def fibonacci(n): if 0 <= n <= 1: return n n_minus1, n_minus2 = 1, 0 result = None for f in range(n - 1): result = n_minus2 + n_minus1 n_minus2 = n_minus1 n_minus1 = result return result
前置说明
通用的斐波那契数列定义规则如下:
- fib(0) = 0
- fib(1) = 1
- 当n≥2时,fib(n) = fib(n-1) + fib(n-2)
这段代码采用迭代法实现计算,没有使用递归,执行效率更高。
逐段拆解逻辑
- 边界判断:
if 0 <= n <= 1: return n
直接匹配数列前两项的定义,输入n为0直接返回0,n为1直接返回1,不需要走后续计算逻辑。 - 变量初始化:
n_minus1, n_minus2 = 1, 0
n_minus2存储fib(n-2)的初始值,对应fib(0)=0;n_minus1存储fib(n-1)的初始值,对应fib(1)=1,result变量用来暂存每一轮的计算结果。 - 循环计算:
for f in range(n - 1):
循环执行n-1次,每次完成一轮递推:- 计算当前项值:
result = n_minus2 + n_minus1,符合fib(n) = fib(n-1) + fib(n-2)的规则 - 变量滚动更新:把n_minus2更新为上一轮的n_minus1,n_minus1更新为刚算出来的当前项值,为下一轮计算做准备
- 计算当前项值:
- 循环结束后直接返回result,就是第n项的斐波那契数值。
实际执行示例(以n=4为例)
我们可以手动跑一遍流程验证结果:
n=4大于1,走后续逻辑,初始n_minus1=1,n_minus2=0,循环次数为4-1=3次
- 第1次循环:result=0+1=1 → n_minus2=1,n_minus1=1
- 第2次循环:result=1+1=2 → n_minus2=1,n_minus1=2
- 第3次循环:result=1+2=3 → n_minus2=2,n_minus1=3
循环结束返回3,正好符合fib(4)=3的正确结果。
代码优势
迭代实现避免了递归版本大量重复计算、n过大时栈溢出的问题,时间复杂度为O(n),空间复杂度为O(1),实用性更强。
内容的提问来源于stack exchange,提问作者mahie031
相关产品推荐
相关产品推荐

