¿Qué es una función recursiva y cómo se crea una en Java?

La necesidad de repetir el código nunca puede subestimarse en la búsqueda de soluciones a algunos de los mayores problemas del mundo. Lo que necesita saber es que en programación, la repetición toma una de dos formas: iteración o recursión.

El objetivo aquí es presentarle la repetición en el código y demostrar cómo se puede utilizar para mejorar sus programas Java.

Los programas repetitivos pueden ayudarlo a resolver algunos de los problemas de programación más difíciles. Esto es lo que necesita saber para crear programas recursivos en Java.

Usando iteración

La iteración usa una estructura de bucle para repetir el código. Los tres tipos de estructuras iterativas son bucle previo a la prueba (while), bucle posterior a la prueba (do-while) y bucle controlado por contador (for) .

Estas estructuras iterativas operan repitiendo un bloque de código mientras una condición específica permanece verdadera, pero tan pronto como esa condición se vuelve falsa, el ciclo se detiene y el programa regresa a su flujo normal.

Por ejemplo, podríamos emplear una de las estructuras iterativas para resolver el problema de la suma de todos los números enteros de 1 a n. Dependiendo de la estructura iterativa que se utilice, la solución tomará una forma específica, pero cualquiera de las tres estructuras iterativas puede proporcionar una solución para este problema utilizando el siguiente pseudocódigo.

Ejemplo de pseudocódigo de iteración

 
START
DECLEARE sum, count as integer
sum = 0
count = 1
REPEAT
Sum = sum + count
Count = count + 1
UNTIL count > n
END

El pseudocódigo anterior tiene dos variables, suma y recuento, que se inicializan en 0 y 1 respectivamente. La variable "count" se inicializa a 1 porque el problema que estamos tratando de resolver establece que necesitamos la suma de todos los números enteros de 1 a n.

A la variable "n" se le asignará un número aleatorio del usuario y la variable "count" aumentará en uno cada vez que se realice un bucle, pero tan pronto como el valor de la variable "count" supere el de "n" entonces el bucle se detendrá.

¿Por qué utilizar la recursividad?

Si tuviéramos que examinar los hechos que rodean la iteración y la recursividad, encontraremos que varias cosas son ciertas.

  • Ambos métodos implican repetición.
  • Ambos métodos requieren una condición de prueba, que indicará cuándo detenerse.
  • En teoría, ambos métodos pueden ejecutarse para siempre si no se da o no se cumple una condición de salida.
  • Cualquier problema que se pueda resolver mediante iteración también se puede resolver mediante recursividad y viceversa.

Entonces, ¿por qué querríamos elegir un método sobre el otro? La respuesta simple es la eficiencia. Con la recursividad, un programador puede usar menos código para lograr lo que es esencialmente el mismo resultado. Menos código significa que hay una disminución significativa en la posibilidad de que los errores pasen desapercibidos.

La recursividad usa más memoria y es más lenta que la iteración, pero tiene una pila incorporada (estructura de datos). Con la iteración, tendría que construir una estructura de datos (esencialmente reinventar la rueda), dejando su programa abierto a una mayor posibilidad de errores no detectados debido al código adicional.

Relacionado: Excepciones de Java: ¿las está manejando correctamente?

¿Cómo funciona la recursividad?

La recursividad es el nombre que se le da a un proceso en el que una función se llama a sí misma repetidamente hasta que se cumple una condición específica. Este método repetitivo resuelve problemas dividiéndolos en versiones más pequeñas y simples de sí mismos.

Cada función recursiva consta de dos partes: caso base y caso general.

Estructura básica de un ejemplo de función recursiva

 
Function(){
//base case
//general case
}

El caso base es la sección de la función recursiva que resuelve el problema. Entonces, siempre que la función recursiva llega al caso base, el programa sale de la función recursiva y continúa con su flujo natural.

El caso general es la sección de la función recursiva que es repetitiva. Aquí es donde la función se llama a sí misma y donde se realiza la mayor parte del trabajo.

Usando la recursividad en Java

Algunos lenguajes de programación solo admiten iteración, mientras que otros solo admiten recursividad. Afortunadamente, Java es uno de los lenguajes que admite ambos métodos repetitivos.

En Java, la recursividad se usa de la misma manera que se usa en cualquier otro lenguaje que la admita. La clave es asegurarse siempre de que su función recursiva tenga tanto un caso básico como un caso general, en ese orden.

Volvamos a nuestro ejemplo de suma inicial, el objetivo es encontrar la suma de todos los números enteros de 1 an, donde n es un número entero proporcionado por el usuario.

Ejemplo de recursividad de Java

 
//recursive function
int Sum(int n){
//base case
if (n <= 1){
return 1;
}
//general case
else{
return n + Sum(n-1);
}
}

La función recursiva anterior toma un número entero "n" y solo termina su ejecución cuando el valor de n es menor o igual a 1.

Si tuviéramos que pasar el entero 5 al programa anterior, la variable "n" asumiría el valor de 5. El valor de "n" se verificaría en el caso base, pero dado que 5 es mayor que 1 "n ”Ahora se pasará al caso general.

En este ejemplo, el caso general llamará a la función recursiva cuatro veces. En la última llamada a la función, el valor de "n" será 1, cumpliendo efectivamente los requisitos del caso base, lo que da como resultado la terminación de la función recursiva y devuelve 15.

Si cambiamos el valor de “n” a 7, la función recursiva se llamará a sí misma seis veces y devolverá 28 antes de terminar su ejecución.

¿Quieres intentarlo tu mismo? Puede ejecutar el programa recursivo anterior utilizando la siguiente línea de código en la función principal de su programa Java.

 
System.out.println( Sum(7));

Que has aprendido

Si ha completado todo este artículo, ahora tiene una comprensión básica de los dos métodos repetitivos que se utilizan en la programación. Ahora reconoce las similitudes entre la iteración y la recursividad y por qué un desarrollador elegiría usar la recursividad sobre la iteración, y cómo usar una función recursiva en Java.

Crédito de la imagen: ThisIsEngineering / Pexels