我有递归编写的程序,这是由于其性质将大幅波动,从而去了蟒蛇的限制。程序的形式也很重要,所以我宁愿不改变它。Python的递归限制?
我已经遇到越来越深,像这样:
sys.setrecursionlimit(1500)
我的问题是它是否是我的情况,增加递归限制这样的建议?我见过有很多理由的人反对它。
我有递归编写的程序,这是由于其性质将大幅波动,从而去了蟒蛇的限制。程序的形式也很重要,所以我宁愿不改变它。Python的递归限制?
我已经遇到越来越深,像这样:
sys.setrecursionlimit(1500)
我的问题是它是否是我的情况,增加递归限制这样的建议?我见过有很多理由的人反对它。
sys.setrecursionlimit(1500)
是提高递归深度完美的罚款。(在合理范围内!)你已经张贴任何代码,但如果有“疯狂波动”,这不是一个稳定的解决方案。不应该使用Python by-and-large进行深度递归。在我看来,你有3种选择:1。 去构建你的函数,并反复做的事情,而不是递归。
如果你有你的心脏确实设置递归: 2.使用Java的递归 3.使用C++递归
不是解决办法本身,但你也许能够利用functools.lru_cache
功能装饰以memoize的你的递归函数,并阻止它运行到全面深度。
没有任何洞察到你在做什么,这是很难知道这是否会成为可能。如果它只是一个简单的递归数学函数(例如斐波那契数),那么这种方法可能会有一些运气。
的好处是,你不必对您的代码进行任何结构性变化 - 就在你的函数定义的顶部添加@lru_cache(MAXSIZE =无)。
是的,绝对不是一个“功能性”语言。 – MrName
@MrName:如果你想要的功能语言扩展Python的,看[椰子](http://coconut-lang.org/),它尾部调用优化,允许无限递归风格。 – 9000