Es porque, cada vez que la función se llama recursivamente, usted está inicializando el
l = 0
r = array.length – 1
Como resultado de lo cual no está cambiando el tamaño de su ventana de búsqueda o, precisamente, no está disminuyendo el tamaño de su ventana de búsqueda.
Este código funcionará solo en caso de que el elemento a buscar esté en la posición media.
p.ej. matriz se parece a 1 2 3 4 5
Si busca 3, este código funcionará ya que no va a recurrir.
if (matriz [mid] == x)
volver a mediados
- Estoy a punto de graduarme en meses. ¿Ayudará mi propio proyecto cuando esté buscando trabajo?
- Soy inteligente, pero no lo suficiente. ¿Qué debo hacer?
- Perdí alrededor de 10k en acciones el año pasado. ¿Cómo mitigar el riesgo en el futuro? ¿Tengo miedo de invertir ahora?
- Estoy planeando conducir a la ciudad de Londres. ¿Cómo puedo encontrar un estacionamiento seguro donde también puedo estacionar durante la noche si es necesario?
- Estoy interesado en escuchar las opiniones de las mujeres sobre joyas para hombres. Más allá de los relojes y anillos, ¿qué piensa sobre pulseras, aretes o más? ¿Caliente o no? ¿Aceptable o no?
Este bloque de código suyo le dará la respuesta en el caso anterior.
Pero en el momento en que busca cualquier otro elemento colocado en una posición no intermedia o el elemento no presente en la matriz, el código desbordará la pila.
He modificado tu código. Se ve bastante similar
public static int recursiveBinarySearch (int [] array, int l, int r, int x) {
si (l <= r) {
int mid = l + (rl) / 2;
if (matriz [mid] == x)
volver a mediados
if (matriz [mediados]> x)
return recursiveBinarySearch (array, l, mid-1, x);
if (matriz [mediados] <x)
return recursiveBinarySearch (array, mid + 1, r, x);
}
volver -1;
}
Espero que esto ayude !