Python输出234432?

2024-04-19 18:53:15 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下这段代码吗。我知道它会上升到4(num(n+1)),但是为什么第二个打印语句从4减去,然后它在if语句中循环返回n+1呢

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

num(2)  

上面的输出是234432


Tags: 代码ifdef语句numprint
2条回答

您必须记住,每个调用的参数都是不同的。因此,在num(4)n中,如果num在中间以3作为参数调用,则4num的整个持续时间内是4无关联的。在整个调用期间,它的n都是3

所以numn为4或更高时按顺序做2件事:打印n,然后打印n。例如

num(4) // prints 44

n小于等于3时,num按顺序做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),在两个print调用之间打印3443

您可以这样认为,每个调用在完成时都返回给被调用方,并且它不处理任何特殊的递归。当它们返回时,被调用的函数将继续,并且被调用的函数将不会影响本地值,即使它被调用的函数相同或是被调用的函数相同

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

程序流程可以表示为:

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

用文字或图片来表示递归是很棘手的,建议你一步一步地运行它,不管是在纸上还是用一些可视化工具

相关问题 更多 >