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

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

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

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

C++

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

Q&A

解決済

1回答

864閲覧

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

alice4649

総合スコア17

再帰

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

C++

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

0グッド

0クリップ

投稿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}

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

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

投稿2021/05/03 04:58

編集2021/05/03 05:09
actorbug

総合スコア2224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問