[python] 最大再帰処理回数(Maximum Recursion Depth)を変更する
2018年07月27日の記事の再掲&Update(WordpressのBackupを無くしてしまったため。)
背景
再帰処理の回数 の多い関数を実行すると
プログラムが下記のような RecursionError
エラーが出て停止するようになります。
RecursionError: maximum recursion depth exceeded
結論
そのような時は、コードを先に見なすべきですが、(ループに直すとか)
一時的にその再帰回数をあげる方法もあります。
import sys
sys.setrecursionlimit(2000)
この上限値はプラットフォームによって異なりますが、(platform-dependent)
指定した上限値が大きすぎたりするとエラーになります。
因みに、現在の設定値は、 sys.getrecursionlimit()
で取得可能です。
補足
sys.setrecursionlimit()
で設定する値は、
厳密には最大再帰回数ではなくPyhtonインタープリターのスタックのサイズであるため、
この値より若干少ない再帰回数であってもエラー(RecursionError)となる。
Set the maximum depth of the Python interpreter stack to limit.
下記の例にあるように、 上限値を 2000
に設定していても、1998
でエラーとなりました。
import sys
def test(n):
if n == 1:
print('Finish')
return
test(n - 1)
sys.setrecursionlimit(2000)
test(1998)
# RecursionError: maximum recursion depth exceeded while calling a Python object
参考
https://docs.python.org/3/library/sys.html#sys.setrecursionlimit
Pythonの再帰回数の上限を確認・変更