【问题标题】:Why does this function return -1?为什么这个函数返回-1?
【发布时间】:2021-05-01 15:34:28
【问题描述】:

我必须在 C 中运行代码。该代码为二进制搜索创建了一个函数。所以它只是读取一个数组大小的数字和一个数字 x 并返回它在数组上的位置。代码是:

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 小于数组中间位置的数字,则将值更改为高。

如果 x 大于数组中间位置的数字,则将值更改为低。

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

我认为我最终没有得到那个回报(-1)。这是否意味着代码找不到所需数字的位置并返回负值以表示有问题?

【问题讨论】:

  • "意思是.." 是的。
  • 这里有一个如何不编码的好例子:不要编写,永远不要呈现未记录/未注释的代码。 (The code creates a function … 读起来有点搞笑 - 它实现一个函数。)

标签: c function return binary-search


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2019-06-26
    • 2016-03-21
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多