我有带递归函数的代码:
def myPermutation (newString, newDict):
if sum(newDict.values()) == 0:
print(newDict)
return
else:
curDict = newDict
nextDict=newDict
for char in newString:
# print('from line 09 -> ', curDict)
# print('from line 10 -> ', char, curDict[char])
if curDict[char] == 0:
continue
else:
# print(char)
print(curDict)
nextDict[char] -= 1
print(nextDict)
myPermutation(newString, nextDict)
nextDict=curDict
return
newString = 'AB'
# newDict = curDict(newString)
newDict = {'A': 1, 'B': 1}
# print(newString, newDict)
test = myPermutation(newString, newDict)
# print(test)
我的出局是:
{'A':1,'B':1}
{'A':0,'B':1}
{'A':0,'B':1}
{'A':0,'B':0}
{'A':0,'B':0}
看起来我的递归函数工作不正常,我做了一些调试,当函数尝试从顶层进行第二次循环时(从第一级树的“A”移动到“B”),我发现了字典从{'A':1,'B':1}更改为{'A':0,'B':0}。期望输出量应该是这样的:
{'A':1,'B':1}
{'A':0,'B':1}
{'A':0,'B':1}
{'A':0,'B':0}
{'A':0,'B':0}
{'A':1,'B':1}
{'A':1,'B':0}
{'A':1,'B':0}
{'A':0,'B':0}
{'A':0,'B':0}
答案 0 :(得分:0)
以下代码:
curDict = newDict
nextDict=newDict
创建两个指向同一对象的名称。如果你换一个,另一个会改变。也许你想要一份深刻的副本?
import copy
curDict = copy.deepcopy(newDict)
nextDict = copy.deepcopy(newDict)
这意味着您现在可以独立于curDict
更改两个nextDict
。