为什么此递归加法没有返回

时间:2019-10-08 21:25:32

标签: python-3.x

这是一个奇怪的打印返回9,然后打印1,我也检查了pycharm中的调试器,(东西)由于某种原因一直递减计数

def repeater(stuff):
    if stuff != 9:
        stuff += 1
        print(stuff)
        repeater(stuff)
    return stuff

print(repeater(0))

2 个答案:

答案 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

您可以阅读有关递归工作原理的更多信息。