如何在非尾递归中转换尾递归

时间:2017-03-24 16:11:19

标签: python algorithm recursion tail-recursion

如何在非尾递归中转换此函数? 提前谢谢。

def recursive(values,names, aux, maxim, index_of_max, i, j):

    if j == len(values) and i == len(values)-1:

        return order(values, names, aux, maxim, index_of_max)
    elif j == len(values):

        i+=1
        return recursive(values,names, aux, maxim, index_of_max, i, i+1)
    elif values[i] >= values[j]:

        return recursive(values,names, aux, maxim, index_of_max, i, j+1)
    else:
        aux[j] = max(aux[i]+1, aux[j])
        if aux[j] > maxim:

            return recursive(values,names, aux, aux[j], j, i, j+1)
        else:

            return recursive(values,names, aux, maxim, index_of_max, i, j+1)

我不知道如何在我的函数中传递参数以非尾递归转换

2 个答案:

答案 0 :(得分:1)

一个简单的答案:使用return 0 + recursive(...)或类似的东西。这会强制在递归调用之后评估加法,使其成为非尾部。

答案 1 :(得分:0)

如果您担心堆栈溢出并希望对函数进行更正式的转换,那么您可以像在此article中一样构建蹦床。每个递归函数都可以转换为迭代,反之亦然。但是,性能影响是特定于语言的,因为您处于编码表面。