gpt4 book ai didi

python - 全局变量搞乱了我的递归函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:26 26 4
gpt4 key购买 nike

我刚刚遇到了一个棘手的问题。下面的代码应该将单词分成长度为 numOfChar 的 block 。该函数调用自身,这使得函数内部不可能有结果列表 (res)。但是,如果我将它作为全局变量保存在外部,那么每次使用不同输入值调用该函数都会导致错误结果,因为 res 不会被清除。

谁能帮帮我?

代码如下(如果您有兴趣,这是 problem 7-23 from PySchools.com ):

res = []

def splitWord(word, numOfChar):
if len(word) > 0:
res.append(word[:numOfChar])
splitWord(word[numOfChar:], numOfChar)
return res

print splitWord('google', 2)
print splitWord('google', 3)
print splitWord('apple', 1)
print splitWord('apple', 4)

最佳答案

纯递归函数不应修改全局状态,这算作副作用。

代替追加和递归,试试这个:

def splitWord(word, numOfChar): 
if len(word) > 0:
return [word[:numOfChar]] + splitWord(word[numOfChar:], numOfChar)
else:
return []

在这里,您将单词一次一个地切成碎片,在每次调用时向下移动,然后在向上移动时将这些碎片重建为列表。

这是一个常见的模式,称为 tail recursion .

附言作为@e-satis请注意,递归不是在 Python 中执行此操作的有效方法。另见 @e-satis's answer有关尾递归的更详细示例,以及使用生成器解决问题的更 Pythonic 方法。

关于python - 全局变量搞乱了我的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com