许多编程语言(例如Python)都有一个固定的最大递归深度。我知道你可以改变这个深度,或者干脆不写递归函数,但是如果你确实写了一个递归函数并且达到了最大递归深度,那么你应该如何准备和处理呢?
在函数签名中添加一个参数,每次调用该参数都会增加。当它接近最大递归深度时,在到达之前执行一些操作。
以下是一个伪代码示例:
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
在那个时候,你真正能做的唯一一件事就是让用户知道出了问题,任务无法按照设计执行。
我认为最好的方法是避免编写可能达到最大深度的递归代码。总有一种方法可以将递归算法重写为迭代算法,所以就这样做吧。
如果你一定要编写可能会达到限制的递归代码,那么请编写一个备用的迭代版本,捕获递归超出异常并切换到迭代版本。