我实际上正在学习如何应用递归来解决一些现实生活中的问题。让我们说,我有一个存储家谱的字典,每个人的孩子也将存储在这个字典中,并且它也存在于树中。我想找出一个家庭的子树并将其存储到一个单独的字典中,所以我必须继续检查这个人是否有孩子。但是,我不知道为什么我的递归函数的新字典只能存储那些没有孩子的人。
dict[1] = [[2,3], 2] #the first one is the children list, the second one is the level in the family tree
newDict = {}
subtree = findSub(dict, 2, 0, newDict)
#my newDict is an empty dictionary, newDict= {}
#level stores the person's level in the tree
def findSub(dict, parent, level, newDict):
level += 1
children = dict[parent][0]
if (len(children) == 0):
info = [dict[parent][0], level]
newDict[parent] = info
else:
for child in children:
findSub(dict, child, level, newDict)
return newDict
答案 0 :(得分:2)
但是,我不知道为什么我的递归函数的新词典只能存储那些没有孩子的人。
def findSub(dict, parent, level, newDict):
level += 1
children = dict[parent][0]
if (len(children) == 0):
^^^^^^^^^^^^^^^^^^^^^^^^
info = [dict[parent][0], level]
.....
此if
检查元素是否没有子元素。如果它有子项,你可以进一步递归,但在进一步递归之前不要添加元素。
如果你想保存父母(最终会导致整个子树),你会做类似的事情
def findSub(dict, parent, level, newDict):
level += 1
children = dict[parent][0]
info = [dict[parent][0], level]
newDict[parent] = info
if (len(children) != 0):
for child in children:
findSub(dict, child, level, newDict)
return newDict