¿Qué es la recursividad?

¿Qué es la recursividad?
java recursividad programacion factorial tutorial

¡Hola! Voy a explicaros en este artículo en qué consiste la recursividad en programación. Voy a hacerlo con Java, pero el concepto es el mismo para cualquier lenguaje. Primero veremos qué es la recursividad y luego haremos varios ejemplos.

¿Qué es la recursividad?

recursividad

Es una técnica utilizada en programación que nos permite que un bloque de instrucciones se ejecute un cierto número de veces (el que nosotros determinemos). A veces es algo complicado de entender, pero no os preocupéis. Cuando veamos los ejemplos estará clarísimo. En Java, como en otros muchos lenguajes, los métodos pueden llamarse a sí mismos. Gracias a esto, podemos utilizar a nuestro favor la recursividad en lugar de la iteración para resolver determinados tipos de problemas.

Ejemplo sencillo

Vamos a ver un pequeño ejemplo que no hace absolutamente nada. Es un método cuyo único objetivo es llamarse a sí mismo:

void cuentaRegresiva () { cuentaRegresiva(); }

Si ejecutáis esto, os va a dar un error en la pila (mítico StackOverflow Error, Biblia de los programadores).

Como véis, he llamado al método cuentaRegresiva porque vamos a mostrar por pantalla la cuenta atrás de un número que nosotros pasemos como parámetro a la función. Por ejemplo, para hacer la cuenta atrás de 10 sin recursividad, haríamos:

for( int i = 10; i >= 0; i--) { System.out.println(i); }

Ahora, para hacerlo de manera recursiva, tendríamos que pasar como parámetro un número. Además, tras imprimir ese número, llamaremos a la misma función con el número actual restando uno:

void cuentaRegresiva(int numero) { System.out.println(numero); cuentaRegresiva(numero - 1); }

Es lo que os he comentado arriba. Llamamos a la función con un 10. Imprimimos el 10 y llamamos a la función con un 9. Imprimimos el 9 y llamamos a la función con un 8. Así hasta el fin de los días. Digo hasta el fin de los días porque os va a saltar error si ejecutáis esto así directamente:

public class Recursividad { static void cuentaRegresiva(int numero) { System.out.println(numero); cuentaRegresiva(numero - 1); } public static void main(String[] args) { cuentaRegresiva(10); } }

Problema: llamada infinita. Para ello, lo que tenemos que hacer es que cuando el número sea 0, deje de llamar a la función. Para eso, metemos una estructura condicional de toda la vida. Gracias al condicional, dejará de ejecutarse a partir de 0:

void cuentaRegresiva(int numero) { System.out.println(numero); if(numero > 0) { cuentaRegresiva(numero - 1); } }

Factorial

Calcular el factorial de un número con recursividad es el típico ejemplo para explicar este método de programación. Recordad que el factorial de un número es multiplicar dicho número por todos sus anteriores hasta llegar a 1. Se representa con una exclamación. Por ejemplo:

5! = 54321 = 120 El recorrer los números hacia atrás ya lo tenemos hecho. Ahora lo que queda es multiplicar ese número por su anterior, y así sucesivamente: int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } Si ya queréis simplificarlo al máximo y dejar a vuestros amigos con la boca abierta, haced esto: int factorial(int n) { return (n == 0) ? 1 : n * factorial(n - 1); }

Espero que os haya servido el tutorial para aprender algo más sobre programación. Recordad que esto está hecho en Java, pero vale para otros lenguajes.

¡Un saludo! Imagen: artdecomexico.com