我已經在C語言中實現了二進制搜索的初始遞歸版本。但是,當要找到的元素位於數組的最後位置時,它似乎不起作用。有沒有辦法解決這個問題,而不改變函數的原型?爲什麼我的二進制搜索實現不能找到最後一個元素?
#include <stdio.h>
int search(int value, int values[], int n);
int main() {
int a[] = { 26, 27, 28 };
if (search(28, a, 3) == 0)
printf("Found.\n");
else
printf("Not found.\n");
}
int search(int value, int values[], int n)
{
if (n <= 0)
return 1;
if (value < values[n/2])
// Search the left half
return search(value, values, n/2);
else if (value > values[n/2])
// Search the right half, excluding the middle term
return search(value, values + n/2 + 1, n/2 - 1);
else
return 0;
return 1;
}
我只是跑你的代碼;它工作正常嗎?你能澄清你的錯誤,你可重複的步驟? – Miket25
爲什麼如果'value == values [n/2]'返回'0'?你不應該返回'n/2'嗎?而'return 1'這一行沒用。 –
@EugeneSh。我認爲零是正確的,它返回0或1來表示是否找到一個值,0是正確的。 – Miket25