Python で最大再帰の深さを取得して増やす方法

Minahil Noor 2023年1月30日 2020年11月2日 Python Python Recursion
  1. 関数 getrecursionlimit() を使って Python の最大再帰の深さを取得する
  2. Python で最大再帰の深さを設定するには setrecursionlimit() 関数を使用する
Python で最大再帰の深さを取得して増やす方法

この記事では、getrecursionlimit() 関数と setrecursionlimit() 関数を用いて Python の最大再帰の深さを取得および増加させる方法を紹介します。

関数 getrecursionlimit() を使って Python の最大再帰の深さを取得する

再帰とは何ですか?再帰は繰り返しのプロセスです。

Python では、再帰関数にはいくつかの制限があります。これは、関数が何回繰り返すかを教えてくれます。再帰の深さの最大値を得るには、getrecursionlimit() 関数を使用することができます。正しい構文は以下の通りです。

sys.getrecursionlimit()

このメソッドはパラメータを受け付けません。

以下のプログラムは、このメソッドを使って Python で再帰の最大値を取得する方法を示しています。

import sys
print(sys.getrecursionlimit())

出力:

3000

Python で最大再帰の深さを設定するには setrecursionlimit() 関数を使用する

再帰の深さが Python のデフォルトの最大再帰深さを超える場合、RecursionError をスローします。以下の例を見てみましょう。

def Test(i):
    if i > 0:
        return Test(i-1)+1
    else:
        return 0

Test(5000)

出力:

Traceback (most recent call last):
  File "C:/Test/test.py", line 7, in <module>
    Test(5000)
  File "C:/Test/test.py", line 3, in Test
    return Test(i-1)+1
  File "C:/Test/test.py", line 3, in Test
    return Test(i-1)+1
  File "C:/Test/test.py", line 3, in Test
    return Test(i-1)+1
  [Previous line repeated 1021 more times]
  File "C:/Test/test.py", line 2, in Test
    if i > 0:
RecursionError: maximum recursion depth exceeded in comparison

上記の問題を解決するためには、最大再帰の深さを増やす必要があります。再帰の上限を設定するには、setrecursionlimit() 関数を使用します。この関数を使用するための正しい構文は以下の通りです。

sys.setrecursionlimit(limit)

このメソッドは 1つのパラメータのみを受け付けます。パラメータの詳細は以下の通りです。

パラメータ 説明
limit 必須 設定したい制限値です。

以下のプログラムは、このメソッドを使って Python で再帰制限を設定する方法を示しています。

import sys
sys.setrecursionlimit(5000)
print(sys.getrecursionlimit())

出力:

5000