よしたく blog

ほぼ週刊で記事を書いています

Pythonでの再帰関数の上限を変更する

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 特有なのかもしれない。