gpt4 book ai didi

c - 使用递归进行二分搜索而无需数组中的元素数量?

转载 作者:行者123 更新时间:2023-11-30 19:35:26 26 4
gpt4 key购买 nike

我正在编写一个程序,该程序通过递归使用二分搜索来搜索用户输入的整数,其中 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;

}

最佳答案

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 block 的 3 个可能分支中的 1 个值,然后函数结束。因此,您将获得其他 2 个未定义的行为。您需要返回从调用 find_m() 中获得的结果,尽管从表面上看found 最终成为该值在数组中的位置,而不仅仅是 1。

关于c - 使用递归进行二分搜索而无需数组中的元素数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com