检查元素是否在数组中或没有无限循环

时间:2018-06-26 22:29:35

标签: c arrays

我正在尝试在登录时查看数组中是否有数字,但是该函数会执行

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));

}

1 个答案:

答案 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;
}