La función recursiva de C no devolverá verdadero

Tengo una función de búsqueda que emplea la recursividad para realizar una búsqueda binaria de una matriz,values[], paravalue:

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;
}

El código que llama esto simplemente llamarecurseSearch(value, values, 0, n);
En aras de la verificación, establecerévalues[5] A igual{3, 11, 32, 54, 66}, value ser3 (es decir, esto debería devolver 0), yn por lo tanto ser5.

Entonces esto se llama:recurseSearch(3, values, 0, 5);

Ahora esperaría que esto finalmente regrese e imprima,0, ya que3 está de hecho en la matriz. Al depurar, todo va bien hasta quemidpoint es 0, y por lo tantovalues[midpoint] == value es cierto, y entonces elreturn 0 La línea debe correr. Sin embargo, lo que sucede es que sí, pero luego el control aparentemente se mueve hacia el final (cierre}) de la función, pero luego retrocede y ejecuta elreturn 3; en línea (aquí) 21.

No puedo entender por quéreturn 0 la declaración no solo regresa de la función y por qué lareturn 3 no corre en absoluto

nótese bien Este problema se resuelve eliminando elreturn 3; línea, sin embargo, esto hace que el sonido metálico se queje y el comando para ejecutar (make) que estoy usando,fatalmente tener un ataque de silbido, que preferiría evitar

Respuestas a la pregunta(1)

Su respuesta a la pregunta