有人可以解释一下这段代码。我知道它上升到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
答案 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)
中n
在4
的整个持续时间内都是num
,无论是否以num
作为其中间的参数调用3
。在整个通话过程中,n
是3
。
因此,当num
为4或更高时,n
按顺序执行2件事:打印n
,然后打印n
。例如。
num(4) // prints 44
因此,num
在n
为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
。
您可以想到,每个调用完成后都会返回给被调用者,并且不对递归进行任何特殊处理。当它们返回时,被调用的函数将继续,并且被调用的函数将不会影响局部值,即使被调用的函数相同或与被调用的函数相同。