質問編集履歴

3

修正コードのアップ

2019/01/08 09:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -235,3 +235,109 @@
235
235
  画像のように13行目で再帰せずに14行目に抜けてしまいます。
236
236
 
237
237
  これはなぜなのでしょうか?
238
+
239
+
240
+
241
+ 今現在のコードは以下のようになります。
242
+
243
+ ```
244
+
245
+ #include <stdio.h>
246
+
247
+ #include <stdlib.h>
248
+
249
+ #include <string.h>
250
+
251
+
252
+
253
+ /* 二分探索 xは探したい値 */
254
+
255
+ int binary(int a[],int left,int right,int x){
256
+
257
+ int middle=(left+right)/2;
258
+
259
+ if(x==a[middle]) return 1;
260
+
261
+
262
+
263
+ if(left<right){
264
+
265
+ int hit=a[middle];
266
+
267
+ if(hit > x){binary(a, left, middle, x);}
268
+
269
+
270
+
271
+ if(x > hit){binary(a, middle+1,right,x);}
272
+
273
+ }
274
+
275
+ return -1;
276
+
277
+ }
278
+
279
+
280
+
281
+ int main(){
282
+
283
+ int i,n,m;
284
+
285
+
286
+
287
+ scanf("%d",&n);
288
+
289
+ int s[n];
290
+
291
+ for(i=0;i<n;i++){
292
+
293
+ scanf("%d",&s[i]);
294
+
295
+
296
+
297
+ /* 配列sの作成 */
298
+
299
+
300
+
301
+ }
302
+
303
+
304
+
305
+ scanf("%d",&m);
306
+
307
+ int t[m];
308
+
309
+ for(i=0;i<m;i++){
310
+
311
+ scanf("%d",&t[i]);
312
+
313
+
314
+
315
+ /* 配列tの作成 */
316
+
317
+ }
318
+
319
+
320
+
321
+ int x,ans,count;
322
+
323
+ count=0;/* 見つかった回数カウント */
324
+
325
+ for (i = 0; i < m;i++) {
326
+
327
+ x=t[i];
328
+
329
+ ans=binary(s,0,n-1,x);
330
+
331
+ if(ans==1)count++;
332
+
333
+ }
334
+
335
+ printf("%d",count);
336
+
337
+ return 1;
338
+
339
+ }
340
+
341
+
342
+
343
+ ```

2

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

2019/01/08 09:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -219,3 +219,19 @@
219
219
  }
220
220
 
221
221
  ```
222
+
223
+
224
+
225
+ その後デバッグツールを使い、変数の確認等を行いましたが、
226
+
227
+ x>hit を満たしているのにもかかわらず再帰せずreturn -1に到達してしまいます。
228
+
229
+ x=4,hit=3である以上
230
+
231
+ if(x > hit){binary(a, middle+1,right,x);}
232
+
233
+ で再帰すると思うのですがなぜか再帰しません。(![イメージ説明](8c839663680a7ba4665bec3e3441f820.png)
234
+
235
+ 画像のように13行目で再帰せずに14行目に抜けてしまいます。
236
+
237
+ これはなぜなのでしょうか?

1

誤字

2019/01/07 09:56

投稿

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