Answer the question
In order to leave comments, you need to log in
Implementing recursive binary search on an array in C?
I am taking a CS50 course, the task is to implement a recursive binary search in an ordered array in SI
. According to the terms of the task, the function declaration cannot be changed. That is, the prototype should look exactly like this: bool search(int value, int values[], int n)
where value is the desired value, int values[] is the array of values, int n is the number of elements in the array
Here is the code I wrote. If the desired number falls in the middle of the array, everything is fine. But if the number is on the right or left of the middle, the function returns false :(
What am I doing wrong?
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;
}
Answer the question
In order to leave comments, you need to log in
I'm modifying devalone 's
answer a bit , because it seems to have a small error with the array size in the second call:
bool search(int value, int values[], int n)
{
//проверим количество элементов в массиве
if (n <= 0)
return false;
//Находим "середину массива"
int middle = n/2;
if (value > values[middle])
return search(value, values + middle + 1, n - middle - 1);
else if (value < values[middle])
return search(value, values, middle);
return true;
}
bool search(int value, int values[], int n)
{
//проверим количество элементов в массиве
if (n <= 0)
return false;
//Находим "середину массива"
int middle=n/2;
if (value > values[middle])
return search(value, &values[middle + 1], n - middle - 1);
else if (value < values[middle])
return search(value, values, middle);
return true;
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question