无法理解Python 2.7中的阶乘的经典递归示例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了无法理解Python 2.7中的阶乘的经典递归示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1378字,纯文字阅读大概需要2分钟。
内容图文
![无法理解Python 2.7中的阶乘的经典递归示例](/upload/InfoBanner/zyjiaocheng/745/20d93aff10874f84b72852440307b5ae.jpg)
我理解递归的概念,我感到困惑的是流量控制.我看到过这种方式有两种,一种是我得到的,另一种是我没有的.例一:
def fact(n):
if n == 0:
return 1
else:
return n * fact(n-1)
所以在这个例子中,如果我们运行fact(3),会发生以下情况:
fact(3) = 3*fact(3-1)`
fact(2) = 2*fact(2-1)
fact(1) = 1*fact(1-1)
fact(0) = 1
或组合:3 * 2 * 1 * 1 = 6
现在,对于下面的内容,我被绊倒的地方在于流量控制的工作原理.我在脑海中根深蒂固,当一个函数被调用时,其他一切都被暂停,直到该函数完成,此时程序返回到main.以下是我的大脑认为发生在下面的事情:
def factorial(n):
if n == 0:
return 1
else:
recurse = factorial(n-1)
result = n * recurse
return result
我们称之为factorial(3):
factorial(3)=factorial(2)=factorial(1)=factorial(0)=1
我认为这种情况发生的原因是因为结果是在调用之后分配的,并且在我看来代码永远不会到达,因为流控制在分配结果之前暂停main.我认为这个函数只是运行n == 0的测试,直到返回1然后程序退出.
帮助我理解为什么我似乎无法将这个概念化.
解决方法:
这是程序流程的概述.看起来可能有点令人困惑,但它可能会有所帮助.这里,不同的选项卡级别表示不同的堆栈,每一行是程序执行的命令.
factorial(3)
| factorial(2)
| | factorial(1)
| | | factorial(0)
| | | RETURNS 1
| | recurse = 1
| | result = 1 * 1 [since n=1]
| | RETURNS 1 [returning result]
| recurse = 1 [catching returned result of 1]
| result = 2 * 1 [since n=2]
| RETURNS 2 [returning result]
recurse = 2 [catching returned result of 2]
result = 3 * 2 [since n=2]
RETURNS 6 [returning result]
内容总结
以上是互联网集市为您收集整理的无法理解Python 2.7中的阶乘的经典递归示例全部内容,希望文章能够帮你解决无法理解Python 2.7中的阶乘的经典递归示例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。