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