Python ではデフォルトで再帰関数の上限が 1000 に設定されている。知らなかった...
sys.getrecursionlimit()
で現在の上限を確認できる。
今回はサッと確認するのに便利なGoogle Colaboratory
を使う。
import sys print(sys.getrecursionlimit())
たしかに 1000 に設定されている。
1000
例えば次の再帰関数を実行するとRecursionError: maximum recursion depth exceeded in comparison
エラーが吐かれる。たしかに 1000 回以上には対応していないことがわかる。
def test(n): if n == 1: print('終わり') return test(n - 1) test(1001)
RecursionError: maximum recursion depth exceeded in comparison
再帰関数の上限があることを確認したが、その上限値をsys.setrecursionlimit()
関数で変更できる。
sys.setrecursionlimit(10000) print(sys.getrecursionlimit())
最初に確認したときは 1000 だったが、変更後の 10000 に変更されている。
10000
再帰関数を再度実行すると無事に処理が終了していることがわかる。
def test(n): if n == 1: print('終わり') return test(n - 1) test(1001)
終わり
Python 以外の言語でも再帰関数の上限が設定されているのか確認したが、明確な情報は出てこなかった。 この制限は Python 特有なのかもしれない。