我正在尝试在登录时查看数组中是否有数字,但是该函数会执行
else if(arr[(r-l)/2] < n)
一直,它变成一个无限循环。这是为什么?
int exists(int n, int *arr, int l, int r){
if(l == r){
if(arr[l] == n){
return 1;
}
else{
return 0;
}
}
else if(arr[(r-l)/2] == n){
return 1;
}
else if(arr[(r-l)/2] > n){
return exists(n, arr, l, (r-l)/2);
}
else if(arr[(r-l)/2] < n){
return exists(n, arr, (r-l)/2, r);
}
}
int main(){
node *root = NULL;
int arr[5] = {1,2,3,4,5};
printf("%d", exists(5, arr, 0, 4));
}
答案 0 :(得分:0)
好吧,如果
else if (arr[(r-l)/2] == n) {
正在执行,那是因为
if (l == r) {
是假
您似乎正在尝试执行二进制搜索,如果这样,则索引计算全部错误。
int exists(int n, int *arr, int l, int r) {
if (l <= r) {
int mid = (l + r) / 2;
if (arr[mid] == n) {
return 1;
} else if (arr[mid] > n) {
return exists(n, arr, l, mid - 1);
} else {
return exists(n, arr, mid + 1, r);
}
}
return 0;
}