質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2548閲覧

PythonでAtCoder ABC009 D問題にて、RecursionErrorを解決したい。

kasanegi

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/08 20:15

該当の問題

https://beta.atcoder.jp/contests/abc009/tasks/abc009_4

提出したコード

python3

1# 入力 2K, M = map(int, input().split()) 3A = list(map(int, input().split())) 4C = list(map(int, input().split())) 5 6 7def atM(m): 8 """ 9 :param m: 目的の要素の1originでの位置 10 :return: Aのm番目の要素 11 """ 12 13 # 目的の要素がすでにある場合 14 if m in range(1, len(A)+1): 15 return A[m-1] 16 # 新しく計算する必要がある場合 17 else: 18 # 計算 19 result = C[1-1] & atM(m-1) 20 for i in range(m-2, m-K-1, -1): 21 result = result ^ (C[m-i-1] & atM(i)) 22 # 追加 23 A.append(result) 24 return result 25 26 27print(atM(M))

入力sampleへの反応

入力例1 → 正常に作動
入力例2 → 正常に作動
入力例3 → 問題発生

エラー内容

Traceback (most recent call last):
File "C:/Users/user/PycharmProjects/AtCoder/ABC/9/d.py", line 17, in <module>
print(atM(M))
File "C:/Users/user/PycharmProjects/AtCoder/ABC/9/d.py", line 10, in atM
result = C[1-1] & atM(m-1)
File "C:/Users/user/PycharmProjects/AtCoder/ABC/9/d.py", line 10, in atM
result = C[1-1] & atM(m-1)
File "C:/Users/user/PycharmProjects/AtCoder/ABC/9/d.py", line 10, in atM
result = C[1-1] & atM(m-1)
[Previous line repeated 993 more times]
File "C:/Users/user/PycharmProjects/AtCoder/ABC/9/d.py", line 7, in atM
if m in range(1, len(A)+1):
RecursionError: maximum recursion depth exceeded in comparison


一応無駄な計算はしないように配慮したつもりなのですが、ほかの参加者の方の回答を見てもこの簡単な対策では上手くいかないことはわかりました。
もしどなたか解決方法をご存知でしたら、御時間のある折にでもお教えいただきたく思います。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

何回か同じ質問に答えたことがあります。

Python 3.x - スタックオーバーフローを回避したい(144388)|teratail

コードの先頭に以下のように追加。

python

1import sys 2sys.setrecursionlimit(適当に大きい数) # デフォルトは1000なので動くまで増やす

アルゴリズムの見直しが必要かどうかまでは検討していません。

投稿2018/10/08 21:43

編集2018/10/08 21:46
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kasanegi

2018/10/08 23:05

回答ありがとうございます! その方法は原理までは把握してませんが、一応耳にしてはいました。 ただ今回すべてのテストケースに通る為にどの程度の数が必要なのかは不明です。 その後の検討により、この問題はアルゴリズムの見直しで劇的な改善があるケースのようなだと分かったので、そちらの方面で考えております。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問