我用C++写了一个简单的二进制搜索函数。代码如下所示:在递归函数中返回函数和不返回有什么区别?
int binary_search(int arr[], int key, int imin, int imax)
{
if (imin > imax)
{
return -1;
}
else
{
int imid = imin + (imax - imin)/2;
if (arr[imid] > key) binary_search(arr, key, imin, imid - 1);
else if (arr[imid] < key) binary_search(arr, key, imid + 1, imax);
else return imid;
}
}
但我发现,如果我在第10行和11加return
,代码似乎以同样的方式工作。代码如下:
int binary_search(int arr[], int key, int imin, int imax)
{
if (imin > imax)
{
return -1;
}
else
{
int imid = imin + (imax - imin)/2;
if (arr[imid] > key) return binary_search(arr, key, imin, imid - 1);
else if (arr[imid] < key) return binary_search(arr, key, imid + 1, imax);
else return imid;
}
}
所以我的问题是这两种情况有什么区别?
打开更多编译器警告。你应该得到一个关于达到非void函数的结尾。 – Biffen
您是否检查过返回值的正确性? –