二进制搜索功能整理而不返回int

时间:2015-11-03 01:44:31

标签: c compiler-errors binary-search

我一遍又一遍地浏览了这个函数,无法弄清楚为什么我在尝试编译代码时会收到此警告/错误。我使用的编译器运行-Werror所以我不确定它是警告还是错误,但我得到的错误是:

错误:控件可能会达到非空函数的结束[-Werror,-Wreturn-type]

这是我的功能

int binarySearch(int key, int array[], int min, int max)
{
    //Check if there is value is not found
    if(max < min)
    {
        return -1;
    }
    else
    {
        //find midpoint
        int midpoint = (min + max) / 2;

        //Run recursive steps
        if(array[midpoint] < key)
        {
            binarySearch(key, array, midpoint + 1, max);
        }
        else if(array[midpoint] > key)
        {
            binarySearch(key, array, min, midpoint - 1);
        }
        else
        {
            return midpoint;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

如果array[midpoint] < keyarray[midpoint] > key,则递归调用binarySearch,然后在不指定返回值的情况下从函数末尾删除。您可能希望返回由这两个分支中的递归调用返回的值,例如

return binarySearch(key, array, midpoint + 1, max);

(要回答你的另一个问题,如果-Werror没有设置,编译器诊断会发出警告,但是警告表示代码中存在错误,这当然是为什么{{1}通常是一个好主意。)