这是一个奇怪的打印返回9,然后打印1,我也检查了pycharm中的调试器,(东西)由于某种原因一直递减计数
def repeater(stuff):
if stuff != 9:
stuff += 1
print(stuff)
repeater(stuff)
return stuff
print(repeater(0))
答案 0 :(得分:1)
调用repeater(stuff)
时,没有传递变量stuff
,而是传递了变量stuff
的副本。当您说stuff += 1
时,不是在修改调用函数的stuff
,而是在修改它的副本。退出该功能时,该更改不会反映在原始文件中。
然后,当函数退出时,您不执行返回值为stuff
的任何操作-再次将其从函数中反向复制出来。 Python确实允许您在不使用函数返回值的情况下调用该函数,但是看起来您的目的是将repeater(stuff)
的返回值应用于stuff
。
要实现此目的,只需更改行
repeater(stuff)
到
stuff = repeater(stuff)
答案 1 :(得分:0)
最后会有额外的1
的原因是repeater(stuff)
返回了stuff
的值,该值已由您的打印语句即print(repeater(0))
接收。当所有递归调用都返回时,没有存储/使用任何值,但是print(repeater(0))
进行的第一个调用获得了1
的值,因为repeater(stuff)
返回了东西的值在第一次通话期间1
之后stuff += 1
。
您可以阅读有关递归工作原理的更多信息。