C 为什么不使用递归对排序数组进行二进制搜索
我试图实现一个二进制搜索,其中n是数组的大小,它不使用递归,只有当我不使用递归时,它才有效,我似乎不明白为什么C 为什么不使用递归对排序数组进行二进制搜索,c,cs50,C,Cs50,我试图实现一个二进制搜索,其中n是数组的大小,它不使用递归,只有当我不使用递归时,它才有效,我似乎不明白为什么 int mid = 0; int low = 0; bool search(int value, int values[], int n) { do { mid = (low + n)/2; if(values[mid] == value) { return true; } else if (values[mid]>
int mid = 0;
int low = 0;
bool search(int value, int values[], int n)
{
do
{
mid = (low + n)/2;
if(values[mid] == value)
{
return true;
}
else if (values[mid]>value)
{
n= mid -1;
return search(value, values, n);
}
else if (values[mid]<value)
{
low = mid + 1;
return search(value, values, low);
}
}
while (n > low);
return false;
}
intmid=0;
int低=0;
布尔搜索(int值,int值[],int n)
{
做
{
中等=(低+n)/2;
如果(值[mid]==值)
{
返回true;
}
else if(值[mid]>值)
{
n=中-1;
返回搜索(值,值,n);
}
否则(值[中]低);
返回false;
}
您的程序是两种不同解决方案的混合体。您必须使用循环或递归函数来解决这个问题
你尝试使用的循环应该是这样的,这里不需要递归
while (low <= high) {
mid = (low+high) / 2;
if (value < values[mid])
high = mid - 1;
else if (value > values[mid])
low = mid + 1;
else
return true;
}
return false;
while(低值[中])
低=中+1;
其他的
返回true;
}
返回false;
如果需要使用递归,则不需要循环。您的答案可以如下所示:
bool search(int value, int values[], int low, int high ) {
if (low <= high) {
int mid = (low + high)/2;
if (values[mid] == value)
return true;
else if (value > values[mid])
return search(value, values, mid+1, high);
else
return search(value, values, 1, mid-1);
}
return false;
}
bool搜索(int值、int值[]、int低、int高){
if(低值[中])
返回搜索(值、值、中+1、高);
其他的
返回搜索(value,values,1,mid-1);
}
返回false;
}
我在这里假设您可以定义自己的函数头。问题是您调用递归调用来搜索数组的上半部分,并使用指向下半部分的指针。因此,如果值在上半部分,它将找不到它。你需要像这样的东西:
bool search(int value, int values[], int n) {
int mid = n/2;
if (n <= 0) {
return false;
} else if (values[mid] == value) {
return true;
} else if (values[mid] > value) {
return search(value, values, mid);
} else if (values[mid] < value) {
return search(value, values + mid + 1, n - mid - 1);
}
}
bool搜索(int值,int值[],int n){
int-mid=n/2;
if(n值){
返回搜索(值、值、mid);
}else if(值[中间]<值){
返回搜索(value,value+mid+1,n-mid-1);
}
}
如果使用递归,是否需要Do while循环?搜索的函数头必须是这样的吗?或者我们可以让它只是布尔搜索(int-value,int-values[])?或者布尔搜索(int-value,int-values[],int-low,int-high)?@MarcLambrichs:函数参数中的数组实际上是指针,所以这是传递指针而不是int