我正在编写一个程序,通过递归使用二进制搜索,用户输入的整数为0,即输入的最后一个整数。我假设用户将按递增顺序输入它们,并且它们不会输入超过10个整数。我已经让它工作了,但它总是返回搜索的数字是在系列中,而不是。例如:
Numbers entered: 1 2 3 4 5 6 0
Number to search for: 9
9 is in the series
我想它与不了解数组的大小有关,除了它的最大值是10,但我不想要求用户想要的元素数量。我该如何解决这个问题?
#include <stdio.h>
int find_m(int a[], int i, int m)
{
int mid;
if (first>last) {
return -1;
}
mid=(first+last)/2;
if (a[mid]>m) {
find_m(a, first, mid-1, m);
}
else if (a[mid]<m) {
find_m(a, first, mid+1, m);
}
else {
return mid;
}
}
int main()
{
int a[10], i, m, first, mid, last, found;
for (i=0; i<10; i++) {
printf ("Please enter integers (no more than 10 numbers) in increasing order with a 0 as the last number\n");
scanf ("%d", &a[i]);
if (a[i]==0) {
break;
}
}
printf ("Now enter a number you would like to find in the series\n");
scanf ("%d", m);
found=find_m(a, m, 0, i-1);
if (found==1) {
printf ("%d is not in the series\n", m);
}
else {
printf ("%d is in the series\n", m);
}
return 0;
}
答案 0 :(得分:0)
if (a[mid]>m) {
find_m(a, first, mid-1, m);
}
else if (a[mid]<m) {
find_m(a, first, mid+1, m);
}
else {
return mid;
}
在上面的代码中,您只返回if / else if / else块的3个可能分支中的1个值,然后函数结束。因此,您为其他人获取了未定义的行为2.您需要return
从find_m()
调用获得的结果,尽管看起来很found
}最终成为该值的数组中的位置而不仅仅是1。