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) что я использую,фатально иметь шипение, которое я бы предпочел избежать

Ответы на вопрос(1)

Ваш ответ на вопрос