recursivas recursiva matematicas funciones funcion discretas c recursion return

matematicas - funciones recursivas javascript



C la función recursiva no devolverá verdadero (1)

No he examinado cuidadosamente tu código, por lo que podría haber otros errores, pero parece que quieres que el valor de retorno de la llamada recursiva más profunda pase por la pila hasta la persona que llama. En ese caso, eliminarías la return 3; y simplemente devuelva el valor de cada una de las llamadas recursivas que está realizando:

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 return recurseSearch(value, values, min, midpoint); else if (values[midpoint] < value) //search in right return recurseSearch(value, values, midpoint, max); else if (values[midpoint] == value) return 0; else return 2; }

La forma en que originalmente escribió su código, los valores de retorno de las llamadas recursivas se ignoraron por completo, y el return 3; declaración sería ejecutada en su lugar.

Tengo una función de búsqueda que emplea recursión para realizar una búsqueda binaria de una matriz, values[] , para un 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; }

El código que llama a esto simplemente llama recurseSearch(value, values, 0, n);
Por el bien de verificar, estableceré los values[5] a igual {3, 11, 32, 54, 66} , el value será 3 (es decir, esto debería devolver 0), y n por lo tanto, será 5 .

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

Ahora esperaría que esto eventualmente vuelva, e imprima, 0 , ya que 3 está realmente en la matriz. Al depurar todo va bien hasta que el midpoint sea ​​0, y por lo tanto los values[midpoint] == value es verdadero, y por lo tanto la línea de return 0 debe ejecutarse. Sin embargo, lo que ocurre en cambio es que sí lo hace, pero luego el control aparentemente se mueve hacia el final (cierre } ) de la función, pero luego vuelve a subir y ejecuta el return 3; en línea (aquí) 21.

No puedo entender por qué la declaración return 0 no solo sale de la función y por qué la return 3 no se ejecuta en absoluto

Nota: este problema se resuelve eliminando el return 3; línea, sin embargo, esto hace que clang se queje, y el comando para ejecutar ( make ) que estoy usando, fatalmente tiene un silbido, que preferiría evitar