int binary_Search(int a[], int low, int high, int key) {
if (low > high) return -1;
int mid = low + (high - low) / 2;
if (a[mid] == key) return mid;
if (a[mid] < key) binary_Search(a, mid+1, high, key); // 缺失 return
if (a[mid] > key) binary_Search(a, low, mid-1, key); // 缺失 return
// 隱式返回不確定值(通常為 0 或棧垃圾)
}
現象:`mid` 明明是 2,`result` 卻收到 1。
遞歸調用**必須用 `return` 傳遞返回值**層層回溯。缺失 `return` 導致:
int binary_Search(int a[], int low, int high, int key) {
if (low > high) return -1;
int mid = low + (high - low) / 2;
if (a[mid] == key) return mid;
if (a[mid] < key) return binary_Search(a, mid+1, high, key); // 加 return
if (a[mid] > key) return binary_Search(a, low, mid-1, key); // 加 return
return -1; // 防御性編程,理論不可達
}
現代編譯器 (GCC/Clang/MSVC `-Wall` / `/W4`) 會報警:
warning: control reaches end of non-void function [-Wreturn-type]
務必開啟最高警告等級並視為錯誤 (`-Werror` / `/WX`),編譯期直接攔截此類低級 Bug。
ReturnType recursive(Params) {
if (baseCase) return baseValue;
// 處理邏輯...
return recursive(subParams); // 核心:return + 遞歸調用
}
遞歸函數的返回值像接力棒,**每一層都必須用 `return` 向上傳遞**。缺失 `return` 是 C/C++ 遞歸編程的頭號殺手,靜態分析工具與編譯器警告是最強防線。