最近学习 python,遇到一个递归的问题。学习递归最容易理解就是裴波那契数列,这个我能理解,但是遇到了一个算阶乘的问题, 想不通看代码。
def func(a1):
if a1 == 5:
return a1
return a1 * func(a1 + 1)
print (func(1))
这个递归如果是简单的 return func(a1 + 1)
我还好理解,但是加上这个 a1 *
之后我就懵逼了。
我的理解:
调用函数第一次进来a1 = 1
, 不等于5
走下面直接得到一个a1 * func(a1 +1)
相当于1 * func(2)
这里因为是return
的值所以结果是要返回的,2
就是第一个的返回值,这时候a1 = 2
继续调用相当于2 * (a1 + 1)
(这时候a1 = 2
了),那这个返回值就是6
了,2*6=12
,a1=12
, 继续调用12*13
?
我这个算法感觉有点小牛逼,但是觉得我理解的也没啥问题,就是拿返回值继续套嘛,所以懵逼了o(╯□╰)o
哪位小哥哥帮我捋一捋不胜感激。
这个程序其实就是执行 12345 = 120
执行的步骤就是:
其实本质上就等于 func(1) = 12fun(3)