Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 检查元素是否在数组中或不是无限循环_C_Arrays - Fatal编程技术网

C 检查元素是否在数组中或不是无限循环

C 检查元素是否在数组中或不是无限循环,c,arrays,C,Arrays,我试图查看数组中是否有一个数字,但这个函数会执行 else if(arr[(r-l)/2] < n) else if(arr[(r-l)/2]n){ 返回存在(n,arr,l,(r-l)/2); } 否则如果(arr[(r-l)/2]

我试图查看数组中是否有一个数字,但这个函数会执行

else if(arr[(r-l)/2] < n) 
else if(arr[(r-l)/2]
一直以来,它变成了一个无限循环。为什么呢

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

}
int存在(int n,int*arr,int l,int r){
如果(l==r){
如果(arr[l]==n){
返回1;
}
否则{
返回0;
}
}
否则如果(arr[(r-l)/2]==n){
返回1;
}
否则如果(arr[(r-l)/2]>n){
返回存在(n,arr,l,(r-l)/2);
}
否则如果(arr[(r-l)/2]
好吧,如果

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;
}
int存在(int n,int*arr,int l,int r){
if(ln){
返回存在(n,arr,l,mid-1);
}否则{
返回存在(n、arr、mid+1、r);
}
}
返回0;
}

请提供完整的代码,包括对exists()的调用以及示例输入和预期输出。您尚未发布任何循环。除非你这样做,否则你不会得到任何实际的答案。@AndrewHenle它是二进制搜索的递归实现(叹气!)(也就是说)它不需要循环。如果
l
是6,
r
是10,那么
(r-l)/2是什么?@CraigEstey它是binbary搜索(叹气!)(也就是说)的递归实现,它不需要循环。你没有看编辑历史,是吗?我想这就是当你在没有真正学习的情况下尝试实现二进制搜索时发生的情况。。。谢谢你,我会修改我的代码,然后回来。没问题,看看代码,试着理解它的功能,然后随便问一下……这是学习这些类型算法的好方法。唯一棘手的事情可能是第一个条件
if(l有效!!我完全理解了算法并测试了代码!我爱你,感谢你的帮助!棒极了,很高兴能提供帮助…现在想想如何以非递归方式进行操作。非常类似,只需使用循环而不是递归调用,并根据
mid
elem的值操纵
l
r
你在检查什么。