Recursividad en Java: Entendimiento, ejemplos y compensaciones
Recursividad en Java
Esta guía explica los métodos recursivos de Java, recorre un ejemplo clásico de factorial y evalúa los pros y contras de usar recursividad.
En Java, un método que se llama a sí mismo se llama método recursivo, y la técnica general se conoce como recursividad. Una ilustración simple del mundo real son dos espejos enfrentados: cada reflejo es otra imagen del espejo, repitiéndose hasta que la luz se absorbe.
Cómo funciona la recursividad

En la ilustración anterior, el método recursivo() se invoca desde main() —una llamada normal. Dentro de recursivo(), el mismo método se llama a sí mismo de nuevo, creando una llamada recursiva. Para prevenir bucles infinitos, cada llamada recursiva debe incluir una condición de terminación, típicamente implementada con una sentencia if…else.
Ejemplo: Factorial de un número usando recursividad
class Factorial { static int factorial(int n) { if (n != 0) // condición de terminación return n * factorial(n - 1); // llamada recursiva else return 1; } public static void main(String[] args) { int numero = 4, resultado; resultado = factorial(numero); System.out.println(numero + " factorial = " + resultado); } }
Salida:
4 factorial = 24
El método factorial() se llama desde main() con el argumento numero. Dentro de factorial(), la línea
return n * factorial(n-1); hace que el método se invoque a sí mismo con un valor decrementado. Empezando con n = 4, las llamadas progresan: 4 → 3 → 2 → 1 → 0. Cuando n llega a 0, la condición if falla, retornando 1. El producto acumulado luego se propaga de vuelta por la pila de llamadas hasta main().
Cómo se ejecuta el programa de factorial
La imagen a continuación ilustra la evolución de la pila de llamadas durante la ejecución.

Ventajas y desventajas de la recursividad
- Pros: Simplifica el código para problemas que encajan naturalmente en patrones recursivos (ej. recorridos de árboles, generación combinatoria). A menudo resulta en implementaciones más cortas y legibles.
- Contras: Cada llamada recursiva consume espacio en la pila; la recursividad profunda puede llevar a desbordamiento de pila. Las soluciones recursivas son típicamente menos eficientes en memoria y pueden ejecutarse más lento que sus contrapartes iterativas.
En general, la recursividad ofrece soluciones elegantes a costa de mayor uso de memoria y posible sobrecarga de rendimiento. Para muchos casos de uso, especialmente aquellos con profundidad limitada, la compensación vale la pena.
Lectura recomendada: ¿Cuáles son las ventajas y desventajas de la recursividad?
Java
- Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
- Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
- Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
- Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
- Tipos de anotaciones en Java: Guía completa de predefinidas, personalizadas y meta‑anotaciones
- Método Java String length(): Cómo obtener el tamaño de un String (Ejemplo)
- Entendiendo Java String.charAt(): Sintaxis, tipo de retorno, excepciones y ejemplo práctico
- Dominando Java String.endsWith(): Cómo comprobar sufijos de cadena con ejemplos
- Dominando el reemplazo de Strings en Java: replace(), replaceAll() y replaceFirst() explicados
- Invertir una Cadena en Java Usando Recursión – Guía Paso a Paso
- Sobrescritura de Métodos en Java: Personalizando el Comportamiento de la Superclase