col*_*ult 3 python recursion global-variables
我刚遇到一个棘手的问题.以下代码应该将单词拆分成长度的块numOfChar.该函数调用自身,这使得无法res在函数中包含结果列表().但是如果我将其作为全局变量保留在外部,则每次后续调用具有不同输入值的函数都会导致错误的结果,因为res不会被清除.
谁能帮我吗?
这是代码(如果您感兴趣,这是来自PySchools.com的问题7-23):
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)
Run Code Online (Sandbox Code Playgroud)
纯递归函数不应该修改全局状态,这算作副作用.
请尝试以下方法,而不是追加和递归;
def splitWord(word, numOfChar):
if len(word) > 0:
return [word[:numOfChar]] + splitWord(word[numOfChar:], numOfChar)
else:
return []
Run Code Online (Sandbox Code Playgroud)
在这里,你将这个单词一次一块地切成碎片,在每次通话的同时将其切断,然后在上升时将这些碎片重建成一个列表.
这是一种称为尾递归的常见模式.
PS As @ e-satisf指出,递归不是在Python中执行此操作的有效方法.另请参阅@ e-satisf的答案,以获得更精细的尾递归示例,以及使用生成器解决问题的更多Pythonic方法.