我用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
您是否檢查過返回值的正確性? –