【发布时间】:2018-04-18 20:58:28
【问题描述】:
我有一个以递归方式编写的程序,由于其性质,它会大幅波动,因此会超出 Python 的限制。程序的形状也很重要,所以我宁愿不改变它。
我遇到了像这样增加递归限制的情况:
sys.setrecursionlimit(1500)
我的问题是在我的情况下是否建议像这样增加递归限制?我看到人们出于多种原因反对它。
【问题讨论】:
我有一个以递归方式编写的程序,由于其性质,它会大幅波动,因此会超出 Python 的限制。程序的形状也很重要,所以我宁愿不改变它。
我遇到了像这样增加递归限制的情况:
sys.setrecursionlimit(1500)
我的问题是在我的情况下是否建议像这样增加递归限制?我看到人们出于多种原因反对它。
【问题讨论】:
sys.setrecursionlimit(1500)
对于增加递归深度非常好。(在合理范围内!)您没有发布任何代码,但如果存在“剧烈波动”,这不是一个稳定的解决方案。 Python 大体上不应该用于深度递归。在我看来,您有 3 个选择: 1. 解构你的函数并迭代地做事,而不是递归。
如果你真的一心想递归: 2.递归使用Java 3.递归使用C++
【讨论】:
本身不是一个解决方案,但您可以利用 functools.lru_cache 函数装饰器来记忆您的递归函数并防止它完全运行。
如果不深入了解您在做什么,很难知道这是否可行。如果它只是一个简单的递归数学函数(例如斐波那契数),那么您可能会对这种方法有一些运气。
优点是您不必对代码进行任何结构更改 - 只需在函数定义的顶部添加 @lru_cache(maxsize=None)。
【讨论】: