Pythonって最近の大学、特に理系の学部では低学年次のうちから教養課程として学ぶことが増えてきています。 筆者も1年生に授業がありました(必修で二コマも...)
これを機にプログラミングに興味を持ち、AtCorderを始めました。
この記事はpythonの初心者、AtCorderの初心者向けです。
先日、AtCorderの問題ABC204-Cを深さ優先探索の解説記事を見ながらコードを書いていました。
背景理論を学ぶ→コードを学ぶ→コードを書く→入力例でOK→提出→RE
ということでPythonにおける RE(runtime error)について対処法を書きます。
RE
Pythonに用意されているRuntimeError(組み込み例外)とは違います。
REとは runtime error(実行時エラー) の略称のことで、プログラムを実行した際に生じるエラー全般を指します。
エラーの原因
結論のみを言うと再帰関数の実行回数の上限である1000回を超えたためでした。
解決策
import sys
# 再起回数の上限を3000にする
sys.setrecursionlimit(3000)
問題では最大2000回再帰処理を行うとありました。
pythonのデフォルトの再帰関数の実行回数は1000回でした。これのせいで通らなかったんですね。
RecursionError(再帰処理エラー)
再帰処理回数の上限を超えると
「RecursionError: maximum recursion depth exceeded」というエラーが吐かれます。
そしてこのエラーは再帰処理以外でも起こる可能性があります。
elif
を極端に多く使った場合
if a_1:
elif a_2:
.
.
.
elif a_1000:
.
.
.
else:
カッコを極端に多用した場合
((((......(a)+1)+1)+1)......)
どのような仕組みかはわかりませんが、このようなコードを書くことはないので一安心でしょう。
for
文やwhile
文の繰り返し処理については上限がないので心配しなくていいですね。
まとめ
- 再帰処理回数の上限はデフォルトで1000回
- 上限を設定するにはコードを貼る
- 再帰処理以外でもRecursionErrorは起こる