我有这个代码,它打印
1
:
s = 0
def dfs(n):
global s
if n > 10:
return 0
s += dfs(n + 1)
return n
dfs(0)
print(s)
如果我这样修改
dfs
:
def dfs(n):
global s
if n > 10:
return 0
i = dfs(n + 1)
s += i
return n
它将打印
55
我知道什么是更好的书写方式
dfs
。我只是想知道为什么两个s
调用后
dfs
的值不一样
我相信这就是原因。
当你这样称呼它时:
s += dfs(n + 1)
s
的值来自当前调用,在递归调用中修改之前。
但是当你这样称呼它时:
i = dfs(n + 1)
s += i
s
的值来自修改后的递归调用。
一般来说,递归函数不能很好地处理全局变量。递归函数需要自己单独的上下文。