python - 在python中使用递归时的循环流
问题描述
当使用递归时,我担心循环流在 Python 中是如何工作的(不要介意函数,只是了解循环流)
def factorial(n):
print("first line")
if n == 1 or n == 0:
return 1
result = n * factorial(n-1)
print('line after result')
print('current result is ' + str(result) )
print('before return result')
return result
在我的示例中,我使用factorial(3)
并且得到这样的结果:
first line
first line
first line
line after result
current result is 2
before return result
line after result
current result is 6
before return result
6
在计算/返回结果后,我怎么会在结果后三次得到一行。我不应该在结果后只得到一次吗?循环返回多少次结果?我不明白递归循环流在 python 中是如何工作的。请帮忙。谢谢
解决方案
你有line after result
2 次(不是 3 次)。在递归调用期间为每次返回打印此行。
- 你打电话
factorial(3)
。Python 打印"first line"
并运行一个函数factorial(2)
。 - Python 打印
"first line"
并调用factorial(1)
. - Python 打印
"first line"
并返回1
; - 从步骤 3 中获取结果并打印
line after result
; - 从步骤 2 中获取结果并打印
line after result
; - 从步骤 1 中获取结果。
推荐阅读
- html - 可访问性方面,目前使用的最古老的浏览器是什么?我可以实际编程的最古老的浏览器是什么?
- php - 图片上传器非常适合插入表单,但不适用于更新表单
- javascript - 如何从 javascript 函数中获取 TikTok 个人资料图片?
- github - 无法对具有默认域的 github 页面强制执行 https
- sql-server - 为什么具有错误谓词的聚合查询会返回结果?有没有办法不得到结果?
- python - 用下一次出现的非 np.nan 值的值填充 np.nan 值
- transactions - Eth,如何从智能合约中调用存款功能
- c++ - 为浮点常量调用伪析构函数的有效语法
- python - 在 Jenkinsfile 管道 groovy 中获取 python 脚本的输出结果
- c# - JsonSerializer.Deserialize 无法推断用法