1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AtCorder】 初心者必見 RE (runtime error) の対処法 Python

Posted at

Pythonって最近の大学、特に理系の学部では低学年次のうちから教養課程として学ぶことが増えてきています。 筆者も1年生に授業がありました(必修で二コマも...)
これを機にプログラミングに興味を持ち、AtCorderを始めました。
この記事はpythonの初心者、AtCorderの初心者向けです。

先日、AtCorderの問題ABC204-Cを深さ優先探索の解説記事を見ながらコードを書いていました。
背景理論を学ぶ→コードを学ぶ→コードを書く→入力例でOK→提出→RE

{0320B886-FD75-4014-9A96-5D8C5BF9C3AC}.png
RE!? なんだよそれ!! しかも33個は通っている。

ということでPythonにおける REruntime 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は起こる
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?