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