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

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

新規登録して質問してみよう
ただいま回答率
86.02%
再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

AtCoder Beginner Contest 065 Bを再帰関数で実装したがエラーが出る(C++)

alice4649
unknock

総合スコア17

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0グッド

0クリップ

687閲覧

投稿2021/05/03 04:35

ABC65-B(https://atcoder.jp/contests/abc065/tasks/abc065_b)を再帰関数で解いたのですが実行すると”SIGSEGV”と出ます。どこが原因になっているのかご教授願います。

C++

1#include <bits/stdc++.h> 2using namespace std; 3#define ll long long 4#define ld long double 5#define rep(i,a,n) for (ll i = a;i<(n);++i) 6#define all(v) v.begin(),v.end() 7#define bit(n) (1LL<<(n)) 8#define maxe(n) *max_element(all(n)) 9#define mine(n) *min_element(all(n)) 10#define INF 1000000000000 //10^12 11#define MOD 10000007 //10^9+7 12#define MAXR 100000 //10^5 13template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; } 14template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; } 15class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x<lhs.x;}void operator++(){++x;}};I i,n; 16public:range(int n):i({0}),n({n}){}range(int i,int n):i({i}),n({n}){}I& begin(){return i;}I& end(){return n;}}; 17/*------------------------------------------------------------------------------------------------------------------------------------------------*/ 18ll n;vector<pair<ll,ll>>a(n);//宣言 19bool check(ll i,ll ans){//再帰関数として実装 20 ans+=1;//回数 21 if(a[i].first==2)return true;//2だったらtrueを返す 22 if(a[i].second==1)return false;//secondのほうで一回押したかどうかを判定し、押したことがあった場合falseを返す 23 else{ 24 a[i].second=1;//一回押したことを示す 25 check(a[i].first-1,ans);//再帰 26 } 27} 28int main(){ 29 ll cnt=0;//回数はかる 30 cin>>n;//入力 31 rep(i,0,n){ 32 cin>>a[i].first;a[i].second=0;//全て0にセット 33 } 34 if(check(0,cnt))cout<<cnt;//trueが返された場合、回数を出力 35 else cout<<-1;//falseの場合-1を出力 36 return 0; 37}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

nは関数外で定義されているので0で初期化されます。
そして、aはサイズnで初期化、つまり空っぽの状態になります。

そこからaのサイズを増やさずに値を読み込んでいるので、
存在しないa[i]に値を入れようとしてエラーが発生しています。

投稿2021/05/03 04:58

編集2021/05/03 05:09
actorbug

総合スコア1758

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。