2017-08-24 152 views
2

我有递归编写的程序,这是由于其性质将大幅波动,从而去了蟒蛇的限制。程序的形式也很重要,所以我宁愿不改变它。Python的递归限制?

我已经遇到越来越深,像这样:

sys.setrecursionlimit(1500) 

我的问题是它是否是我的情况,增加递归限制这样的建议?我见过有很多理由的人反对它。

回答

4
sys.setrecursionlimit(1500) 

是提高递归深度完美的罚款。(在合理范围内!)你已经张贴任何代码,但如果有“疯狂波动”,这不是一个稳定的解决方案。不应该使用Python by-and-large进行深度递归。在我看来,你有3种选择:1。 去构建你的函数,并反复做的事情,而不是递归。

如果你有你的心脏确实设置递归: 2.使用Java的递归 3.使用C++递归

+1

是的,绝对不是一个“功能性”语言。 – MrName

+0

@MrName:如果你想要的功能语言扩展Python的,看[椰子](http://coconut-lang.org/),它尾部调用优化,允许无限递归风格。 – 9000

2

不是解决办法本身,但你也许能够利用functools.lru_cache功能装饰以memoize的你的递归函数,并阻止它运行到全面深度。

没有任何洞察到你在做什么,这是很难知道这是否会成为可能。如果它只是一个简单的递归数学函数(例如斐波那契数),那么这种方法可能会有一些运气。

的好处是,你不必对您的代码进行任何结构性变化 - 就在你的函数定义的顶部添加@lru_cache(MAXSIZE =无)。