首页 > 解决方案 > 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)

标签: pythonrecursion

解决方案


递归发生在称为调用堆栈的东西上。因此,当您第一次进行递归调用时,它会被放置在调用堆栈中。对于您随后拨打的电话也是如此。一旦达到 0,堆栈上的每个函数调用都会“弹出”,这在您的代码中由“即将备份”行指示,因为它位于递归调用行之后。本质上,即使在遇到 else 情况后,程序仍然必须通过您之前所做的递归调用,并且不会在遇到 else 时退出程序。

我附上了 python 导师页面的截图。随意使用它来逐步了解它是如何工作的!注意输出,以及代表递归调用堆栈的 Frames 列。 蟒蛇导师

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


推荐阅读