基于树结构的python3递归

时间:2017-03-27 22:26:10

标签: python-3.x recursion tree

我有带递归函数的代码:

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}

1 个答案:

答案 0 :(得分:0)

以下代码:

curDict = newDict
nextDict=newDict

创建两个指向同一对象的名称。如果你换一个,另一个会改变。也许你想要一份深刻的副本?

import copy
curDict = copy.deepcopy(newDict)
nextDict = copy.deepcopy(newDict)

这意味着您现在可以独立于curDict更改两个nextDict