我有一个递归编写的程序,由于它的性质,它会剧烈波动,因此,超过Python的限制。程序的形状也很重要,所以我宁愿不改变它。
我遇到过像这样增加递归限制:
sys.setrecursionlimit(1500)
我的问题是在我的情况下是否建议增加这样的递归限制?我见过有人提出反对意见的原因很多。
答案 0 :(得分:4)
sys.setrecursionlimit(1500)
非常适合增加递归深度。(在合理范围内!)您没有发布任何代码,但如果存在“波动”,则这不是一个稳定的解决方案。 Python by-and-large不应该用于深度递归。在我看来,你有3个选择: 1.解构函数并迭代地执行操作,而不是递归。
如果你的心真的设置了递归: 2.递归使用Java 3.递归使用C ++
答案 1 :(得分:2)
本身不是解决方案,但您可以利用functools.lru_cache
函数装饰器来记忆递归函数并防止它运行到最深处。
如果不了解你正在做什么,很难知道这是否可行。如果它只是一个简单的递归数学函数(例如Fibonacci数),那么你可能会对这种方法有所了解。
优点是您不必对代码进行任何结构更改 - 只需在函数定义的顶部添加@lru_cache(maxsize = None)。