玩蛇网提供最新Python编程技术信息以及Python资源下载!

python函数应用请大神帮我看代码问题

问这个问题的原因是做codecademy的一道题,要求建一个阶乘的函数,所以我是这样建立的:

def factorial(x):
    if x == 0 or x==1:
        return 1
    else:
        x=int(x)
        b=1
        while x>1:
            b=x*b
            x=x-1
        return b

但是我在论坛上面找到了一段简洁的多的代码:

def factorial(x):
    if  x==0:
        return 1
    return x * factorial(x-1)

第二个代码是怎么工作的呢,难道 他是把前面的依次算一次,直到1?

你要知道每次函数的调用,在其底层都是一次push操作,函数调用完后就返回是一次pop操作。以刚才的print factorial(4)调用为例子,一步一步分析:

第一步:执行factorial(4),push一下

4 * ??

第二步:执行factorial(4-1),push一下

3 * ??
4 * ??

第三步:执行factorial(3-1),push一下

2 * ??
3 * ??
4 * ??

第四步:执行factorial(2-1),push一下

1 * ??
2 * ??
3 * ??
4 * ??

第五步:执行factorial(1-1),push一下,这个时候x == 0:return 1

1 * 1
2 * ??
3 * ??
4 * ??

到了这里,函数到了return 1返回出口,表示该递归函数的最后一次调用完成了,本次调用应该返回了。

第六步:pop factorial(1-1),返回1

2 * 1
3 * ??
4 * ??

第七步:pop factorial(2-1),返回2

3 * 2
4 * ??

第八步:pop factorial(3-1),返回6

4 * 6

第九步:pop factorial(4-1),返回24

整个递归函数执行完毕,得到结果24。

第二个代码叫递归,你的那个叫循环

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19591.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月24日 - 14时25分19秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules