C рекурсивная функция не вернет true
У меня есть функция поиска, которая использует рекурсию для выполнения двоичного поиска в массиве,values[]
, дляvalue
:
int recurseSearch(int value, int values[], int min, int max) {
if (value > values[max] || min > max) return 1;
int midpoint = (max+min)/2;
if (values[midpoint] > value)
//search in left
recurseSearch(value, values, min, midpoint);
else if (values[midpoint] < value)
//search in right
recurseSearch(value, values, midpoint, max);
else if (values[midpoint] == value)
return 0;
else
return 2;
return 3;
}
Код, который вызывает это просто вызываетrecurseSearch(value, values, 0, n);
Ради проверки установлюvalues[5]
равному{3, 11, 32, 54, 66}
, value
быть3
(то есть это должно вернуть 0), иn
поэтому быть5
.
Итак, это называется:recurseSearch(3, values, 0, 5);
Теперь я ожидаю, что это в конечном итоге вернется, и напечатать,0, так как3
действительно в массиве. После отладки все идет хорошо доmidpoint
0, и, следовательно,values[midpoint] == value
верно, и поэтомуreturn 0
линия должна бежать. Тем не менее, вместо этого происходит то, что происходит, но затем, по-видимому, управление движется до конца (закрытие}
) функции, но затем перемещается обратно вверх и запускаетreturn 3;
на линии (здесь) 21.
Я не могу понять, почемуreturn 0
утверждение не просто возвращается из функции и почемуreturn 3
не работает вообще
Нотабене Эта проблема решается удалениемreturn 3;
строка, однако это заставляет Clang жаловаться, и команда для запуска (make
) что я использую,фатально иметь шипение, которое я бы предпочел избежать