「RecursionError: maximum recursion depth exceeded」は、関数が自分自身を呼び続け、Pythonの再帰の深さ上限(デフォルト1000)を超えたときのエラーです。
def fact(n):
return n * fact(n - 1)
print(fact(5))
def fact(n):
if n <= 1: # 終了条件
return 1
return n * fact(n - 1)
print(fact(5))
# 深い処理はループに書き換える
def fact_loop(n):
r = 1
for i in range(2, n + 1):
r *= i
return r
print(fact_loop(5))
▶ 修正済みコードを実行エディタで開く
まずif n <= 1: return 1のような終了条件があるか、呼ぶたびに引数が終了条件へ近づいているかを確認します。正しい再帰でも深くなる場合はループへの書き換えが確実で、どうしても再帰が必要なときだけsys.setrecursionlimit(5000)で上限を上げます(上げすぎるとクラッシュします)。