Recursión de Java
Recursión de Java
La recursividad es la técnica de hacer que una función se llame a sí misma. Esta técnica proporciona una forma de dividir problemas complicados en problemas simples que son más fáciles de resolver.
La recursión puede ser un poco difícil de entender. La mejor manera de averiguar cómo funciona es experimentar con él.
Ejemplo de recursividad
Sumar dos números juntos es fácil de hacer, pero sumar un rango de números es más complicado. En el siguiente ejemplo, la recursividad se usa para sumar un rango de números al dividirlo en la simple tarea de sumar dos números:
Ejemplo
Usa la recursividad para sumar todos los números hasta 10.
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
Ejemplo explicado
Cuando sum()
se llama a la función, agrega un parámetro k
a la suma de todos los números menores que k
y devuelve el resultado. Cuando k se convierte en 0, la función simplemente devuelve 0. Cuando se ejecuta, el programa sigue estos pasos:
10 + ( 9 + suma(8) )
10 + ( 9 + ( 8 + suma(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + suma(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
Dado que la función no se llama a sí misma cuando k
es 0, el programa se detiene allí y devuelve el resultado.
Condición de parada
Así como los bucles pueden encontrarse con el problema de los bucles infinitos, las funciones recursivas pueden encontrarse con el problema de la recursividad infinita. La recursión infinita es cuando la función nunca deja de llamarse a sí misma. Cada función recursiva debe tener una condición de detención, que es la condición en la que la función deja de llamarse a sí misma. En el ejemplo anterior, la condición de detención es cuando el parámetro k
se convierte en 0.
Es útil ver una variedad de ejemplos diferentes para comprender mejor el concepto. En este ejemplo, la función agrega un rango de números entre un inicio y un final. La condición de detención para esta función recursiva es cuando end no es mayor que start :
Ejemplo
Usa la recursividad para sumar todos los números entre 5 y 10.
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }