質問編集履歴
3
修正コードのアップ
title
CHANGED
File without changes
|
body
CHANGED
@@ -116,4 +116,57 @@
|
|
116
116
|
if(x > hit){binary(a, middle+1,right,x);}
|
117
117
|
で再帰すると思うのですがなぜか再帰しません。(
|
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
デバッグツールを使った確認後の疑問を追加
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
|
+
で再帰すると思うのですがなぜか再帰しません。(
|
118
|
+
画像のように13行目で再帰せずに14行目に抜けてしまいます。
|
119
|
+
これはなぜなのでしょうか?
|
1
誤字
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
c言語 for の無限ループ
|
1
|
+
c言語 for の無限ループ回避の理由
|
body
CHANGED
File without changes
|