python递归程序中的混淆

问题描述 投票:-1回答:4

大家好,谁能向我解释这个输出?

不知道为什么再次递减计数。

def kaboom(i):
    print("first Print: ", i)
    if i < 3:
        kaboom(i+1)
    print("second Print: ", i)

输出:

first Print:  1
first Print:  2
first Print:  3
second Print:  3
second Print:  2
second Print:  1
python recursion
4个回答
2
投票

第二张打印倒数,因为对于您对kaboom(i + 1)进行的每个呼叫,该呼叫都被放置在一组呼叫的顶部。一旦i> = 3,堆栈将停止增长,并从中断的位置弹出呼叫。这样就打印了3,并且kaboom(2 + 1)的执行完成了。然后,对kaboom(1 + 1)的调用从中断处继续,并打印2并结束。最后,kaboom(1)恢复并打印1。


2
投票

您的功能是最远通话的diving,然后又回来并正在打印second Print

call 1 --> i = 1             back to call 1 --> second Print, i it is still 1
    ↓                        ↑
    call 2 --> i = 2         back to call 2 --> second Print, i it is still 2 
    ↓                        ↑
    cal 3 --> i = 3 (end of call chain, it goes back)

0
投票

递归策略使用作为后进先出的堆栈。在您的情况下,如果我是对的,则您的基本条件仅在3时得到满足,然后将其存储在堆栈中,然后进行打印。


0
投票

要了解这一点,您需要了解递归的工作原理。它适用于堆栈的概念。您可以查看以下链接,以清楚地了解:https://www.freecodecamp.org/news/how-recursion-works-explained-with-flowcharts-and-a-video-de61f40cb7f9/

如果您是i<3,您将再次调用相同的函数,因此它将打印第一张图片,依此类推。但是返回之后,执行将不会立即结束。它必须执行其余方法,这是第二次打印。


0
投票

这样想:每次调用kaboom时,都会创建一个新实例。第一次叫kaboom是我。首先打印并调用kaboom(2)。首先打印并调用kaboom(3)。首先打印,因为i = 3,所以不再调用kaboom。但是kaboom(3),kaboom(2)和kaboom(1)尚未完成,因为它们仍必须第二次打印。因为kaboom(3)是最近打开的,所以它必须先关闭,因此为什么要先打印第二个3。然后kaboom(2)打印第二个2,最后kaboom(1)最后打印第二个1,最后完成。]

© www.soinside.com 2019 - 2024. All rights reserved.