python递归的问题?
最近学习 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
哪位小哥哥帮我捋一捋不胜感激。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个程序其实就是执行 12345 = 120
执行的步骤就是:
其实本质上就等于 func(1) = 12fun(3)
观察代码可知,此函数是从1开始递增计算a1的阶乘。以a1=5为例,算法逻辑如下:
1 当传入参数a1!=5时,进入return a1 * func(a1 + 1)语句。
2 当传入参数a1 ==5时,直接返回a1的值,此时递归计算结束。
所以,这个函数的运算步骤为:
loop1 :1*func(1+1);
loop2: func(1+1)=2*func(2+1);
loop3: func(2+1)=3*func(3+1);
loop4: func(3+1)=4*func(4+1);
loop5: func(4+1)=5;
最终结果为:12345=120
你把这个看成一个数学问题
阶乘是什么?
f(1) = 1
f(n) = n * f(n-1)
所以就是