Python全局变量在递归中得到不同的结果

问题描述 投票:0回答:1

我有这个代码,它打印

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

的值不一样
python recursion global
1个回答
0
投票

我相信这就是原因。

当你这样称呼它时:

s += dfs(n + 1)

s
的值来自当前调用,在递归调用中修改之前

但是当你这样称呼它时:

i = dfs(n + 1)
s += i

s
的值来自修改后的递归调用

一般来说,递归函数不能很好地处理全局变量。递归函数需要自己单独的上下文。

© www.soinside.com 2019 - 2024. All rights reserved.