如何处理最大递归深度?

时间:2010-10-14 13:08:29

标签: language-agnostic recursion

许多语言(例如python)具有设置的最大递归深度。我意识到你可以改变这个深度,或者根本不完全编写递归函数,但如果你写了一个递归函数并且你达到了最大递归深度,你将如何准备和处理它?<​​/ p>

3 个答案:

答案 0 :(得分:3)

在函数签名中有一个参数,每个调用都会增加一个参数。当它接近最大递归深度时,在之前做一些事情。

这是一个ruby-ish伪代码示例:

def my_recursive_function(current_depth)
   # do stuff
   if current_depth >= MAX_RECURSION_LIMIT
     # throw exception, or output helpful information or return default value
   else
     my_recursive_function(current_depth+1)
   end

end

答案 1 :(得分:1)

你真正可以做的唯一事情就是让用户知道出现了问题并且无法按照设计执行任务。

答案 2 :(得分:1)

我认为最好的方法是避免编写有可能达到最大深度的递归代码。总有一种方法可以将递归算法重新编写为迭代算法,所以就这样做。

如果您已经开始编写可能达到限制的递归代码,那么编写一个备份迭代版本,捕获超出的递归异常并切换到迭代版本。