为什么这个函数 return -1?

Why does this function return -1?

我必须 运行 C 中的代码。该代码创建一个用于二分查找的函数。所以它只是读取一个数组大小的数字和一个数字 x 和 returns 它在数组中的位置。代码是:

long int binary(long int v[], long int n, long int x){

    long int low = 0, high = n-1, mid;

    while(low<=high){

        mid = (high+low)/2;

        if(x<v[mid]){
            high = mid - 1;}

        else if(x>v[mid]){
            low = mid + 1;}

        else{
            return(mid);}
    }
    return(-1);
}

我不知道我是否完全理解这一点。我的理解是:

如果 x 小于数组中位置 mid 上的数字,则将值更改为高。

如果 x 大于数组中位置 mid 上的数字,它会将值更改为 low。

并且如果 x 等于数组中位置 mid 上的数字,则函数结束,并且 returns 为所需数字位置的值 mid。

我不认为我最终得到 return(-1)。这是否意味着代码无法找到所需号码的位置并 return 编辑了一个负值来表示有问题?

你是对的。当x is not equal to v[mid]时的每一次迭代,要么低索引增加,要么高索引减少。如果 x 不存在于数组 v 中,在某些时候 low 的值将超过 high。然后,循环中断,函数 returns -1.