如何使这个递归函数在python中迭代?

如何使这个递归函数在python中迭代?,python,Python,通常我对这类事情很在行,但这让我很烦。上周我不得不写这个函数,递归地写它是最有意义的,尽管现在我正试图找到一种方法使它迭代,将它合并到我正在写的另一个函数中。这是函数的递归版本 def XXX (x,y,z): if z[x][0][0] != z[y][0][0]: XXX(z[x][0],z[y][0],z) else: return z[x][0] 这就是数据结构 {'A': [('AD', 4.0), None, None], 'C':

通常我对这类事情很在行,但这让我很烦。上周我不得不写这个函数,递归地写它是最有意义的,尽管现在我正试图找到一种方法使它迭代,将它合并到我正在写的另一个函数中。这是函数的递归版本

def XXX (x,y,z):
    if z[x][0][0] != z[y][0][0]:
        XXX(z[x][0],z[y][0],z)
    else:
        return z[x][0]
这就是数据结构

{'A': [('AD', 4.0), None, None], 'C': [('ADBFGC', 14.5), None, None], 'B': [('BF', 0.5), None, None], 'E': [('ADBFGCE', 17.0), None, None], 'D': [('AD', 4.0), None, None], 'G': [('BFG', 6.25), None, None], 'F': [('BF', 0.5), None, None], 'ADBFG': [('ADBFGC', 6.25), ('AD', 4.25), ('BFG', 2.0)], 'BF': [('BFG', 5.75), ('B', 0.5), ('F', 0.5)], 'ADBFGC': [('ADBFGCE', 2.5), ('ADBFG', 6.25), ('C', 14.5)], 'ADBFGCE': [None, ('ADBFGC', 2.5), ('E', 17.0)], 'BFG': [('ADBFG', 2.0), ('BF', 5.75), ('G', 6.25)], 'AD': [('ADBFG', 4.25), ('A', 4.0), ('D', 4.0)]}
我对此一无所知,任何帮助都将不胜感激:)


请注意,应该可以向递归版本添加功能。我还建议定义一个
树(*children)
类,以使事情更清楚。

这种递归(或者在回答的情况下是循环)总是结束吗?在我看来,创建一棵树很简单,它将导致无限递归/循环(“树已结束,没有共同祖先”的条件检查丢失)。我喜欢这个函数,但它返回了一个奇怪的错误,KeyError:('AD',4.0)用于记录:这个函数将找不到最接近的共同祖先;它刚刚被命名为。我相信OP意识到了这一点,并编辑了他的问题。
def ClosestCommonAncestor (otu1,otu2,tree):
    while True:
        a = tree[otu1][0]
        b = tree[otu2][0]
        if a[0] == b[0]:
            return a
        otu1 = a
        otu2 = b
def ClosestCommonAncestor (otu1,otu2,tree):
    while True:
        a = tree[otu1][0]
        b = tree[otu2][0]
        if a[0] == b[0]:
            return a
        otu1 = a
        otu2 = b