質問するログイン新規登録

質問編集履歴

3

修正コードのアップ

2019/01/08 09:54

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -116,4 +116,57 @@
116
116
  if(x > hit){binary(a, middle+1,right,x);}
117
117
  で再帰すると思うのですがなぜか再帰しません。(![イメージ説明](8c839663680a7ba4665bec3e3441f820.png)
118
118
  画像のように13行目で再帰せずに14行目に抜けてしまいます。
119
- これはなぜなのでしょうか?
119
+ これはなぜなのでしょうか?
120
+
121
+ 今現在のコードは以下のようになります。
122
+ ```
123
+ #include <stdio.h>
124
+ #include <stdlib.h>
125
+ #include <string.h>
126
+
127
+ /* 二分探索 xは探したい値 */
128
+ int binary(int a[],int left,int right,int x){
129
+ int middle=(left+right)/2;
130
+ if(x==a[middle]) return 1;
131
+
132
+ if(left<right){
133
+ int hit=a[middle];
134
+ if(hit > x){binary(a, left, middle, x);}
135
+
136
+ if(x > hit){binary(a, middle+1,right,x);}
137
+ }
138
+ return -1;
139
+ }
140
+
141
+ int main(){
142
+ int i,n,m;
143
+
144
+ scanf("%d",&n);
145
+ int s[n];
146
+ for(i=0;i<n;i++){
147
+ scanf("%d",&s[i]);
148
+
149
+ /* 配列sの作成 */
150
+
151
+ }
152
+
153
+ scanf("%d",&m);
154
+ int t[m];
155
+ for(i=0;i<m;i++){
156
+ scanf("%d",&t[i]);
157
+
158
+ /* 配列tの作成 */
159
+ }
160
+
161
+ int x,ans,count;
162
+ count=0;/* 見つかった回数カウント */
163
+ for (i = 0; i < m;i++) {
164
+ x=t[i];
165
+ ans=binary(s,0,n-1,x);
166
+ if(ans==1)count++;
167
+ }
168
+ printf("%d",count);
169
+ return 1;
170
+ }
171
+
172
+ ```

2

デバッグツールを使った確認後の疑問を追加

2019/01/08 09:54

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -108,4 +108,12 @@
108
108
  printf("読み込み終わり");
109
109
  return 1;
110
110
  }
111
- ```
111
+ ```
112
+
113
+ その後デバッグツールを使い、変数の確認等を行いましたが、
114
+ x>hit を満たしているのにもかかわらず再帰せずreturn -1に到達してしまいます。
115
+ x=4,hit=3である以上
116
+ if(x > hit){binary(a, middle+1,right,x);}
117
+ で再帰すると思うのですがなぜか再帰しません。(![イメージ説明](8c839663680a7ba4665bec3e3441f820.png)
118
+ 画像のように13行目で再帰せずに14行目に抜けてしまいます。
119
+ これはなぜなのでしょうか?

1

誤字

2019/01/07 09:56

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- c言語 for の無限ループについて
1
+ c言語 for の無限ループ回避の理由
body CHANGED
File without changes