Post actualizado el día octubre 29, 2026 by DeiviSanzPlay
Cuando alguien implementa por primera vez un algoritmo de búsqueda binaria, casi siempre aparece la misma duda: ¿lo escribo con un bucle while o con una función recursiva? Las dos versiones resuelven el mismo problema (encontrar un valor en un array ordenado dividiendo el rango a la mitad), pero no se comportan igual en memoria, en legibilidad ni en casos límite. Después de revisar código real de entrevistas técnicas y proyectos pequeños, tengo una opinión bastante clara: gana el bucle, y no por moda.
El algoritmo de búsqueda binaria recursivo se enseña mucho porque es elegante. Cuatro líneas, una llamada a sí mismo, un caso base. Pero esa elegancia esconde un coste que muchos tutoriales pasan por alto: cada llamada añade un marco a la pila de ejecución. En arrays de un millón de elementos el número de divisiones es manejable (unas veinte), así que el riesgo de desbordar la pila es bajo en la práctica. Aun así, en lenguajes sin optimización de recursión de cola, como Java o C#, ese consumo extra existe y no aporta nada.
Por qué el bucle gana en el día a día
La versión iterativa del algoritmo de búsqueda binaria mantiene dos índices, izquierda y derecha, y los mueve dentro del mismo bucle. No hay llamadas anidadas, no hay marcos de pila y el depurador se comporta de forma predecible: pones un breakpoint y ves cómo cambian los índices paso a paso. En la recursiva, seguir el flujo obliga a saltar entre llamadas, algo que en un IDE se vuelve tedioso cuando el bug está en el cálculo del punto medio.
Hay un detalle que suele decidir la balanza: el cálculo de mid = (izquierda + derecha) / 2. En lenguajes con enteros de tamaño fijo, esa suma puede desbordar si el array es enorme. La corrección clásica es mid = izquierda + (derecha – izquierda) / 2, y aplicarla en la versión iterativa es trivial. En la recursiva también se puede, pero al replicar el patrón en cada llamada aumentan las oportunidades de olvidarlo.
Un caso concreto que vi en una revisión de código: una función recursiva de búsqueda binaria que devolvía el índice encontrado, pero fallaba cuando el valor estaba en la última posición. El problema no era la recursión en sí, sino que el caso base comparaba mal los límites al reducir el rango. Con el bucle, el mismo error se detecta antes porque los índices están a la vista en todo momento.
Cuándo la recursión sí tiene sentido
No voy a decir que la recursiva sea inútil. En contextos académicos sirve para enseñar el patrón divide y vencerás, y en estructuras como árboles de búsqueda binaria la recursión encaja de forma natural porque el propio dato es recursivo. Pero para un array plano, el algoritmo de búsqueda binaria iterativo es más directo y menos propenso a errores de límites.
Otro matiz: en lenguajes funcionales puros como Haskell, la recursión es la forma idiomática y el compilador suele optimizarla. Ahí la discusión cambia. Pero si programas en Python, JavaScript o Java para un proyecto web o un script de análisis, el bucle es la opción sensata.
Limitaciones que ningún artículo suele mencionar
El algoritmo de búsqueda binaria solo funciona sobre datos ordenados. Si el array no está ordenado, primero hay que ordenarlo, y ese coste (O(n log n)) puede superar la ventaja de buscar en O(log n). Para búsquedas puntuales sobre listas pequeñas o desordenadas, un recorrido lineal es más simple y a veces más rápido por la caché del procesador.
Tampoco brilla cuando necesitas encontrar todos los elementos iguales a un valor o el primer elemento mayor que otro. Ahí entran variantes como lower_bound o upper_bound, que ya requieren cuidado extra con los límites. La versión recursiva complica aún más esos ajustes.
Mi recomendación práctica
Si tienes que escribir un algoritmo de búsqueda binaria hoy para producción, usa el bucle, protege el cálculo del punto medio contra desbordamientos y escribe tests con arrays de tamaño cero, uno y con el valor en los extremos. La recursión queda para cuando el problema lo pida de verdad, no por estética.
La documentación clásica sobre algoritmos (CLRS, materiales de cursos universitarios de estructuras de datos) coincide en presentar ambas versiones, pero rara vez defiende la recursiva como opción por defecto para arrays. Esa elección, en mi experiencia, casi siempre la toma quien prioriza que el código se lea rápido en una pizarra, no quien lo va a mantener.
Perfiles verificables: Sitio web
Publicado el 29 de October de 2026. Última revisión: 29 de October de 2026.