Хитрость в написании рекурсивного чего-либо:
- Выясните, как оно должно заканчиваться.
- Выясните, как оно должно выглядеть за шаг до конца.
- Выясните, как он должен выглядеть за два шага до его окончания, и как переход от №2 к №1 точно такой же, как переход от №3 к №2.
Шаг № 1:
Если число в начале диапазона поиска - это желаемое число, вернуть true.
Если конец диапазона поиска совпадает с началом диапазона поиска, а число вдиапазон поиска не является требуемым числом, верните false.
Шаг № 2:
Если диапазон поиска имеет длину два, разбейте его на два диапазона поиска одного элемента и выполните поискдиапазон, который может содержать требуемое число.
Шаг № 3:
Если диапазон поиска имеет длину более двух, разделите его на два примерно равных диапазона поиска и найдите диапазон, которыйможет содержать требуемый номер.
(который объединяетэти два будут выглядеть следующим образом)
Если диапазон поиска имеет длину двух или более элементов, разбейте его на два примерно равных диапазона, проверьте наибольшее (последнее) число в «нижнем» диапазоне, есличисло равно или меньше этого числа, поиск в нижнем диапазоне;в противном случае ищите более высокий диапазон.
Этот метод не даст вам оптимального решения, если вы не выберете оптимальный способ решения проблемы;однако, он вернет вам правильное решение (при условии, что вы не совершите никаких грубых ошибок).
Теперь код
bool search(int value int array[], int lowIndex, int highIndex) {
if (array[lowIndex] == value) {
return true;
} else if (lowIndex == highIndex) {
return false;
}
int middleIndex = lowIndex + highIndex / 2;
if (array[middleIndex] <= value) {
return search(value, array, lowIndex, middleIndex);
} else {
return search(value, array, middleIndex+1, highIndex);
}
}
При чтении кода онлайн у вас есть большой недостаток.Вы не выполняете ни один из вышеперечисленных шагов, поэтому вам действительно нужно решить проблему задом наперед.Это все равно что сказать, что у меня есть решение, но теперь я должен выяснить, как кто-то другой решил его (предположив, что они не допустили ошибок, и предположив, что у него были такие же требования, как и у вас).