python - if else 语句中使用的递归
问题描述
我是编程新手,所以我对这段代码有点困惑,我认为这应该打印出来:
x 为 2 - 更深
x 为 1 - 更深
x 为 0 - 转身
就是这样,因为它到达dive(0)
并到达了else
声明
怎么打印出来的:
x 为 2 - 更深
x 为 1 - 更深
x 为 0 - 转身
x 是 1 - 回来了
x 是 2 - 回来了
代码是:
def dive(x):
if x > 0:
print(f'x is {x} - Going deeper')
dive(x - 1)
print(f'x was {x} - Coming back up')
else:
print(f'x is {x} - Turning around')
dive(2)
解决方案
递归发生在称为调用堆栈的东西上。因此,当您第一次进行递归调用时,它会被放置在调用堆栈中。对于您随后拨打的电话也是如此。一旦达到 0,堆栈上的每个函数调用都会“弹出”,这在您的代码中由“即将备份”行指示,因为它位于递归调用行之后。本质上,即使在遇到 else 情况后,程序仍然必须通过您之前所做的递归调用,并且不会在遇到 else 时退出程序。
我附上了 python 导师页面的截图。随意使用它来逐步了解它是如何工作的!注意输出,以及代表递归调用堆栈的 Frames 列。 蟒蛇导师
推荐阅读
- indexing - B+树值的设计、插入和删除问题
- reactjs - 当涉及 dispatch() 时,取消订阅 firestore(...).onSnapshot() 不起作用
- sql - 选择第 n 行 Oracle SQL
- matlab - 显示迭代并使用 e^x 的 Maclaurin 展开式
- matplotlib - 我如何将 y 轴设置为百万?
- java - JavaFX如何检查所有动态添加的文本字段是否为空
- r - R regex / grep / grepl 用于字母后跟破折号和数字
- java - 构建字符串算法
- liferay - 在 Liferay 7.2 中,如何设置角色以仅编辑某些内容页面?
- javascript - 您将如何使用 Javascript 更改值/添加到对象数组内的嵌套对象数据?