在一棵树的结构中,我试图找到一根树枝的所有叶子。以下是我写的:
def leafs_of_branch(node,heads=[]):
if len(node.children()) == 0:
heads.append(str(node))
else:
for des in node.children():
leafs_of_branch(des)
return heads
leafs_of_branch(node)
我不知道为什么,但我觉得不对。它可以工作,但是我想知道是否有更好的方法来使用递归而不创建heads
参数。在
Tags:
只要递归继续,在我看来,你做得对;你在递归调用tho上缺少heads参数。不管怎么说,它仍然有效的原因是,正如其他人所说,默认参数是全局的,并且在调用之间重用。在
如果要避免递归altogheter,在这种情况下,可以使用队列或堆栈和循环:
我认为这应该有效:
它不是很漂亮,也许可以再压缩一点,但我尽量保持原始代码的形式,以使发生的事情变得显而易见。在
如果您多次调用原始版本,它实际上将无法工作,因为当您附加到
heads
列表时,该列表实际上会在调用之间保存。在这个
总是个坏主意。最好是这样
^{pr2}$除此之外,您始终使用相同的列表来表示分支的叶数。在你的具体情况下,也许没问题,但迟早你会遇到问题的。在
我建议:
我没有执行
if len(node.children()==0
,而是在降到所有(可能是零)子级之后检查len(leafs)。所以我打电话来节点.子项()只有一次。在相关问题 更多 >
编程相关推荐