2017-08-24 12 views
2

私は再帰的に書かれたプログラムを持っています。その性質上、劇的に変動し、Pythonsの限界を超えます。プログラムの形も非常に重要なので、私はむしろそれを変更したいと思います。Pythonの再帰制限?

私はそうのような深さの増加に遭遇しました:

sys.setrecursionlimit(1500) 

私の質問は、それは、このような再帰制限を増やすために私の状況では賢明であるかどうかではないでしょうか?私は人々が何度もそれに反対しているのを見てきました。

答えて

4
sys.setrecursionlimit(1500) 

は、再帰の深さを増大させるための完全に罰金です。(理由以内!)「野生の変動」があれば、これは安定した解決策ではないですが、あなたは、何のコードを掲示していないしました。 Python by-and-largeを深い再帰に使うべきではありません。私には3つのオプションがあるようです: 1.再帰とは対照的に、あなたの関数を分解し、反復して行います。

あなたは、あなたの心は本当に再帰に設定している場合: 2. Javaの再帰的 3. C++再帰的

+1

はい、間違いなく "機能的な"言語ではありません。 – MrName

+0

@MrName:Python用の関数型言語拡張が必要な​​場合は、[Coconut](http://coconut-lang.org/)を参照して、無限再帰型を可能にする末尾呼び出しの最適化を行います。 – 9000

2

ないソリューション、それ自体が、あなたはmemoizeするfunctools.lru_cache関数デコレータを活用することができるかもしれませんあなたの再帰関数は完全な深さに実行されないようにします。

あなたのしていることを洞察することなく、これが可能かどうかを知るのは難しいです。単なる再帰的な数学関数(フィボナッチ数など)の場合、このアプローチにはいくつかの幸運があります。

利点は、コードに構造的な変更を加える必要がないことです。@lru_cache(maxsize = None)を関数定義の先頭に追加するだけです。