我有一个函数的形式:
def my_func(my_list):
for i, thing in enumerate(my_list):
my_val = another_func(thing)
if i == 0:
# do some stuff
else:
if my_val == something:
return my_func(my_list[:-1])
# do some other stuff
递归部分被调用得足够多以至于我得到了一个 RecursionError,所以我试图用 while 循环替换它,如 here 所解释的那样,但我不知道如何将其与函数中的控制流语句协调起来。如有任何帮助,我们将不胜感激!
最佳答案
可能有一个很好的确切答案,但从递归切换到迭代的最通用(或者可能是快速和肮脏)的方法是 manage the stack yourself .只需手动执行编程语言隐式执行的操作,并拥有您自己的无限堆栈。
在这种特殊情况下有 tail recursion .你看,my_func
递归调用结果并没有被调用者以任何方式使用,它是立即返回的。最后发生的是最深的递归调用的结果冒泡并按原样返回。这就是使@outoftime 的解决方案成为可能的原因。我们只对 into-recursion pass 感兴趣,因为 return-from-recursion pass 是微不足道的。因此 into-recursion pass 被替换为迭代。
关于python - 如何消除包含控制流的Python函数中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40452207/