我有一个经过修改的二分搜索函数,它在一个向量中找到最小值(最接近L的值--一个已知值)和最大值(最接近R的值--相同的已知值)。不幸的是,当我试图编译代码时,我得到了这个警告,我不知道为什么:控制到达非空函数的末端。
int bs_counts (vector <int> Arr, int x, int low, int high, bool searchDirection)
{
bool done = false;
int new_middle = 0;
int mid = (low + high)/2;
while(low <= high && done == true)
{
if(Arr[mid] == x)
{
new_middle = mid;
done = true;
}
else if(Arr[mid] > x)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
if(done == true)
{
return new_middle;
}
else
{
if(searchDirection == true)
{
return low;
}
else if (searchDirection == false)
{
return high;
}
}
}
首先,请正确设置代码格式,因为看起来3个return
语句在while
循环中,而事实并非如此。
编译器迷茫了,看看这段代码。
if (done == true)
{
return new_middle;
}
else
{
if (searchDirection == true)
{
return low;
}
else if (searchDirection == false)
{
return high;
}
}
我们可以明显地看到searchdirection
将是true
或false
,并且总会返回一些内容,但编译器可能忽略了这一点,请将其更改为如下所示。
if (done == true)
{
return new_middle;
}
else
{
if (searchDirection == true)
{
return low;
}
else
{
return high;
}
}
警告也消失了。