Recursion 将一组嵌套递归函数转换为迭代函数

Recursion 将一组嵌套递归函数转换为迭代函数,recursion,iteration,Recursion,Iteration,我读过,原则上可以将递归函数转换为迭代函数。我有一些函数互相调用。我根据我的流程图构建了代码的结构,显然是通过递归的方式来实现的。它对小规模的问题运行良好,但对较大规模的问题会产生分段错误。所以我试图切换到迭代风格,但我无法想象一种技术上的方法,因为分支结构让我感到困惑。有人能给我一个处理这件事的线索吗?代码类似于python中的代码: def main_function(parameters): if condition0: .... if conditio

我读过,原则上可以将递归函数转换为迭代函数。我有一些函数互相调用。我根据我的流程图构建了代码的结构,显然是通过递归的方式来实现的。它对小规模的问题运行良好,但对较大规模的问题会产生分段错误。所以我试图切换到迭代风格,但我无法想象一种技术上的方法,因为分支结构让我感到困惑。有人能给我一个处理这件事的线索吗?代码类似于python中的代码:

def main_function(parameters):
    if condition0:
       ....
       if condition1:
           ....
           if condition2:
               ....
               return function1(parameters)
           else:
               ....
               return function2(parameters)
       else:
           return function1(parameters)
    else:
       return function2(parameters)
#############################################
def function1(parameters):
    if condition3:
       ...
       return function3(parameters)   ### yet another function.. so messed up? :-(((
    else:
       return main_function(parameters)
##############################################
def function2(parameters):
    if condition4:
       ...
       return main_function(parameters)
    else:
       return function1(parameters)
###############################################
def function3(parameters):
   if condition5
      if condition6:
         ...
         return function3(parameters)
      else:
         ...
         return main_function(parameters)
   else:
      return RESULTS   # The only way out! 

如果您有任何想法,我们将不胜感激,提前非常感谢。

因为您展示的每个
return
语句本质上都是一个
return some_other_function()
,所以a似乎是一种自然的建模方式。每个函数都会有一个对应的状态,
return
语句会变成状态转换。

因为您所展示的每个
return
语句本质上都是一个
return some\u other\u function()
,所以a似乎是一种自然的建模方式。每个函数都有一个对应的状态,
return
语句将成为状态转换。

因为每个递归调用都是在
return
语句中启动的。你不需要举起那堆旧东西。例如,当
function1()
调用
returnfunction3()
时,可以删除
function1
堆栈。这样您就不会得到
运行时错误:超过了最大递归深度

您可以通过使用参数返回要调用的后续函数来实现这一点,而不是递归调用

def main_function(parameters):
if condition0:
   if condition1:
       if condition2:
           return function1, parameters # return function to call next with arguments
       else:
           ....
           return function2, parameters
   else:
       return function1, parameters
else:
   return function2, parameters
您应该以类似的方式更改其他函数。现在您可以调用
main_函数()
,如下所示:

next_function, next_fun_param = main_function(parameters)
while hasattr(next_function, '__call__')
    next_function, next_fun_param = next_function(next_fun_param)
# got the RESULT

因为每个递归调用都是在
return
语句中启动的。你不需要举起那堆旧东西。例如,当
function1()
调用
returnfunction3()
时,可以删除
function1
堆栈。这样您就不会得到
运行时错误:超过了最大递归深度

您可以通过使用参数返回要调用的后续函数来实现这一点,而不是递归调用

def main_function(parameters):
if condition0:
   if condition1:
       if condition2:
           return function1, parameters # return function to call next with arguments
       else:
           ....
           return function2, parameters
   else:
       return function1, parameters
else:
   return function2, parameters
您应该以类似的方式更改其他函数。现在您可以调用
main_函数()
,如下所示:

next_function, next_fun_param = main_function(parameters)
while hasattr(next_function, '__call__')
    next_function, next_fun_param = next_function(next_fun_param)
# got the RESULT

我喜欢将其视为“每个递归函数都可以写成基于堆栈的函数”。我不知道这是否有帮助。我喜欢把它想象成“每个递归函数都可以写成基于堆栈的函数”。我不知道这是否有帮助。谢谢你的回答,我对fsm做了一个快速的研究,但我不是一个专业的程序员,有可能用类似的if和while或类似的“简单”东西吗?谢谢你的回答,我对fsm做了一个快速的研究,但我不是一个专业的程序员,有没有可能用if's和while's或类似的“简单”的东西来做呢?好吧,这似乎是可行的。。。非常感谢你,这似乎会起作用。。。非常感谢你