Informática y Software Práctico

Algoritmo de búsqueda binaria: ¿while o recursivo gana?

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.


Sobre el autor: DeiviSanzPlay — Soy David Sanz, Editor y Responsable de Contenidos. Mi trabajo consiste en revisar, corregir y mejorar los contenidos de este blog para que la información sea clara, útil y esté bien estructurada. Trabajo con diferentes temáticas y verticales, por lo que una parte importante de mi día a día es analizar cada contenido, cuidar la redacción y asegurar que el lector encuentre información de calidad. Me gusta prestar atención a los detalles. Desde una corrección de estilo hasta la organización de un artículo, todo cuenta cuando se trata de crear contenidos que realmente aporten valor y sean fáciles de entender. En este blog encontrarás artículos sobre diferentes temas y sectores. Mi responsabilidad es cuidar y supervisar cada contenido para que mantenga unos estándares de calidad y ofrezca una buena experiencia a quien nos visita. Porque para mí, un buen contenido no consiste únicamente en escribir. También hay que revisar, contrastar, ordenar y pensar en la persona que está al otro lado de la pantalla.

Perfiles verificables: Sitio web

Publicado el 29 de October de 2026. Última revisión: 29 de October de 2026.