【发布时间】:2014-07-22 02:52:37
【问题描述】:
我正在 python 中动态实现一棵树。我已经定义了一个类如下
class nodeobject():
def __init__(self,presentnode=None,parent=None):
self.currentNode = presentnode
self.parentNode = parent
self.childs = []
我有一个函数可以从池中为每个节点获取可能的子节点
def findchildren(node, childs):` `# No need to write the whole function on how it gets childs
现在我有一个递归函数,它从头节点(无父节点)开始,并为每个节点递归地向下移动(基本情况是最后一个没有子节点的节点)
def tree(dad,children):
for child in children:
childobject = nodeobject(child,dad)
dad.childs.append(childobject)
newchilds = findchildren(child, children)
if len(newchilds) == 0:
lastchild = nodeobject(newchilds,childobject)
childobject.childs.append(lastchild)
loopchild = copy.deepcopy(lastchild)
while loopchild.parentNode != None:
print "last child"
result.append(loopchild.currentNode) # result global to store values
loopchild = copy.deepcopy(loopchild.parentNode)
else:
tree(childobject,newchilds)
树形结构仅适用于特定数量的输入。一旦池变大,它会导致“超过最大递归深度”
我尝试使用 set.recursionlimit() 设置递归限制,但它不起作用。程序崩溃。我想实现一个递归堆栈,有人可以帮忙吗,即使尝试了很长时间我也没有去哪里??另外,除了 stack 有没有其他方法可以解决这个问题?
【问题讨论】:
-
您是否调查过您是否正确地从树中下降?根据您的描述,听起来 findchildren 可能总是会找到新的孩子(因此该函数永远不会真正耗尽自己)
-
@JeffTratner - 在你们所有人都将我指向 findchildren 之后......我做了更多的挖掘,似乎这就是问题所在。谢谢。
标签: python recursion tree stack