作者:捡耙活哟752 | 来源:互联网 | 2023-02-04 12:44
我对此递归感到有点困惑:
def count(num):
if num == 0:
print('Go!',end=' ')
else:
count(num-1)
print(num,end=' ')
count(5)
为什么这样做?打印"Go!"后程序不应该停止执行吗?
当我在python可视化工具中运行它时,打印出"Go!" 执行跳转到不应该发生的else语句...
例如,它打印"Go!1 2 3 4 5"但我希望它打印"Go!"
1> Martijn Piet..:
Go
印首先,因为其他print()
电话才会发生的递归调用返回.递归函数调用就像任何其他函数调用一样; 一旦调用返回,则执行下一行.
这是发生的事情:
count(5)
叫做.
if num == 0
是假的,所以else
分支被采取
count(4)
叫做
if num == 0
是假的,所以else
分支被采取
count(3)
叫做
if num == 0
是假的,所以else
分支被采取
count(2)
叫做
if num == 0
是假的,所以else
分支被采取
count(1)
叫做
if num == 0
是假的,所以else
分支被采取
count(0)
叫做
if num == 0
是真的
print('Go!', end=' ')
被执行
Go!
使用尾随空格写入并且没有新行到stdout
功能结束,返回
print(num,end=' ')
被执行
1
使用尾随空格写入并且没有新行到stdout
功能结束,返回
print(num,end=' ')
被执行
2
使用尾随空格写入并且没有新行到stdout
功能结束,返回
print(num,end=' ')
被执行
3
使用尾随空格写入并且没有新行到stdout
功能结束,返回
print(num,end=' ')
被执行
4
使用尾随空格写入并且没有新行到stdout
功能结束,返回
print(num,end=' ')
被执行
5
使用尾随空格写入并且没有新行到stdout
功能结束,返回
对函数的每次递归调用都是一个单独的函数执行,除了每次它们不特殊时执行相同的代码.如果有帮助,请在心理上重命名功能; count5
调用count4
并等待它返回,但是count4
等待count3
等等.每个函数都暂停,直到它们调用的函数返回.一旦count0
返回,count1
不只是停止,它仍然有更多的代码要执行!