Python输出234432?

时间:2019-02-26 22:34:02

标签: python recursion

有人可以解释一下这段代码。我知道它上升到4(num(n + 1)),但是为什么第二个print语句减去4却又循环返回具有n + 1的if语句?

def num(n):
    print(n)
    if n < 4:
        num(n+1)
    print(n)

num(2)  

上面的输出是234432

2 个答案:

答案 0 :(得分:0)

它不会“后退”,第一个print()被调用3次,然后第二个print()被调用3次。

程序流程可以表示如下:

num(2):
    print(2)
    num(3):
        print(3)
        num(4):
           print(4)
           print(4)
        print(3)
    print(2)

用文字或图片表示递归非常棘手,建议您在纸上或使用某些可视化工具逐步进行递归。

答案 1 :(得分:0)

您必须记住,每次调用的参数都不相同。因此,在num(4)n4的整个持续时间内都是num,无论是否以num作为其中间的参数调用3 。在整个通话过程中,n3

因此,当num为4或更高时,n按顺序执行2件事:打印n,然后打印n。例如。

num(4) // prints 44

因此,numn为3或以下时按顺序执行3件事:打印n,调用num(n+1),打印n。例如。

num(3) // prints 3443 since num(4) happens to print 44 and it is called between printing 3s

num(2)3相同,但是它在两个打印调用之间调用num(3),并且在两个打印调用之间打印3443

您可以想到,每个调用完成后都会返回给被调用者,并且不对递归进行任何特殊处理。当它们返回时,被调用的函数将继续,并且被调用的函数将不会影响局部值,即使被调用的函数相同或与被调用的函数相同。