2024-04-19 18:53:15 发布
网友
有人能解释一下这段代码吗。我知道它会上升到4(num(n+1)),但是为什么第二个打印语句从4减去,然后它在if语句中循环返回n+1呢
def num(n): print(n) if n < 4: num(n+1) print(n) num(2)
上面的输出是234432
234432
您必须记住,每个调用的参数都是不同的。因此,在num(4)n中,如果num在中间以3作为参数调用,则4在num的整个持续时间内是4无关联的。在整个调用期间,它的n都是3
num(4)
n
num
3
4
所以num在n为4或更高时按顺序做2件事:打印n,然后打印n。例如
num(4) // prints 44
当n小于等于3时,num按顺序做3件事:打印n,调用num(n+1),打印n。例如
num(n+1)
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
num(2)
num(3)
3443
您可以这样认为,每个调用在完成时都返回给被调用方,并且它不处理任何特殊的递归。当它们返回时,被调用的函数将继续,并且被调用的函数将不会影响本地值,即使它被调用的函数相同或是被调用的函数相同
它不“向后”,第一个print()被调用3次,然后第二个print被调用3次
程序流程可以表示为:
num(2): print(2) num(3): print(3) num(4): print(4) print(4) print(3) print(2)
用文字或图片来表示递归是很棘手的,建议你一步一步地运行它,不管是在纸上还是用一些可视化工具
您必须记住,每个调用的参数都是不同的。因此,在
num(4)
n
中,如果num
在中间以3
作为参数调用,则4
在num
的整个持续时间内是4
无关联的。在整个调用期间,它的n
都是3
所以
num
在n
为4或更高时按顺序做2件事:打印n
,然后打印n
。例如当
n
小于等于3时,num
按顺序做3件事:打印n
,调用num(n+1)
,打印n
。例如num(2)
与3
相同,但它调用num(3)
,在两个print调用之间打印3443
您可以这样认为,每个调用在完成时都返回给被调用方,并且它不处理任何特殊的递归。当它们返回时,被调用的函数将继续,并且被调用的函数将不会影响本地值,即使它被调用的函数相同或是被调用的函数相同
它不“向后”,第一个print()被调用3次,然后第二个print被调用3次
程序流程可以表示为:
用文字或图片来表示递归是很棘手的,建议你一步一步地运行它,不管是在纸上还是用一些可视化工具
相关问题 更多 >
编程相关推荐