Wen

[python] 最大再帰処理回数(Maximum Recursion Depth)を変更する

N views

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の再帰回数の上限を確認・変更

本記事は 「表示 - 非営利 - 改変禁止 4.0 国際 (CC BY-NC-ND 4.0)」 を採用。