我在这种二进制搜索算法上遇到了奇怪的编译器错误。我得到一个警告control reaches end of non-void function。这是什么意思?

int binary(int val, int sorted[], int low, int high) {
    int mid = (low+high)/2;

    if(high < low)
        return -1;

    if(val < sorted[mid])
        return binary(val, sorted, low, mid-1);

    else if(val > sorted[mid])
        return binary(val, sorted, mid+1, high);

    else if(val == sorted[mid])
        return mid;
}

答案

编译器无法从该代码中分辨出该函数是否会到达末端并仍然返回某些内容。要清楚,请更换最后一个else if(...)只是else

来自: stackoverflow.com