Python递归函数疑问:斐波那契数列递归实现原理咨询
递归实现斐波那契数列代码解析
先把代码整理成规范格式:
def fib(x): if x == 0: return 0 elif x == 1: return 1 else: return fib(x-1) + fib(x-2) for i in range(8): print(fib(i), end=",")
先搞懂递归到底是什么
递归和索引完全没关系,它的核心是函数自己调用自己——把一个大问题拆成和它逻辑一致的小问题,直到碰到没法再拆的「终止条件」,再从最底层的结果往上汇总,得到最终答案。
逐行拆解这段代码
- 函数的终止条件
fib(x)这个函数的作用是计算第x项斐波那契数。- 当x是0或者1时,直接返回固定值:
fib(0)=0,fib(1)=1——这就是递归的「刹车」,没有它函数会无限调用自己直到程序崩溃。
- 递归计算逻辑
- 当x大于1时,根据斐波那契数列的规则,第x项等于前两项的和,所以用
fib(x-1)拿到第x-1项的值,fib(x-2)拿到第x-2项的值,两者相加就是第x项的结果。
- 当x大于1时,根据斐波那契数列的规则,第x项等于前两项的和,所以用
- 循环打印的作用
range(8)会生成0到7的整数,循环依次把每个数传给fib()函数,计算出对应项的斐波那契数,最后用逗号连起来打印。
拿个实际例子走一遍流程
比如计算fib(3):
- 因为3不是0也不是1,所以需要计算
fib(2) + fib(1) - 先算
fib(2):2也不是0或1,得计算fib(1) + fib(0)fib(1)直接返回1,fib(0)直接返回0,所以fib(2)=1+0=1
fib(1)直接返回1- 最后
fib(3)=1+1=2
运行这段代码后,输出结果是:0,1,1,2,3,5,8,13,
内容的提问来源于stack exchange,提问作者Exquisite Mong
相关产品推荐
相关产品推荐

