如何在非尾递归中转换此函数? 提前谢谢。
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)
我不知道如何在我的函数中传递参数以非尾递归转换
答案 0 :(得分:1)
一个简单的答案:使用return 0 + recursive(...)
或类似的东西。这会强制在递归调用之后评估加法,使其成为非尾部。
答案 1 :(得分:0)
如果您担心堆栈溢出并希望对函数进行更正式的转换,那么您可以像在此article中一样构建蹦床。每个递归函数都可以转换为迭代,反之亦然。但是,性能影响是特定于语言的,因为您处于编码表面。