Прохожу курс CS50 , задача стоит реализовать рекурсивный бинарный поиск в упорядоченном массиве на СИ
По условиям задачи, декларацию функции менять нельзя. То есть прототип должен выглядеть именно так:
bool search(int value, int values[], int n)
где value - искомое значение, int values[] - массив значений, int n - количество элементов в массиве
Вот написанный мной код. Если искомое число попадает на середину массива - всё отлично находится. Но в случае если число справа или слева середины - функция возвращает false :(
Что я делаю не так?
bool search(int value, int values[], int n)
{
//проверим количество элементов в массиве
if (n <= 0)
return false;
//Находим "середину массива"
int middle=n/2;
//Проверяем, вдруг искомое значение попало на середину. На этом этапе всё работает.
if (value==values[middle-1])
return true;
//Проверяем справа, или слева находится искомое значение. Вот тут я делаю что то неправильно :(
else if (value > values[middle-1])
//если значение справа - передаем в функцию адрес элемента следующего за middle,
// и вычитаем из общего количества элементов те, что остались слева
search(value, & values[middle+1], n-middle);
else if (value < values[middle-1])
// если значение слева, то передаем в функцию массив с самого начала,
//но количество элементов ограничиваем лишь теми, что остались слева.
search(value, values, middle-1);
else return false;
}