Recursividad en JAVA

Este va a ser mi primer tutorial en este blog [forCode]. Vamos a hablar sobre la recursividad, ese recurso tan bien logrado, que todo programador debe conocer y a ser posible dominar, la recursividad. No digo que sea mi caso, pero creo que os puedo ofrecer una pequeña introducción para que podáis entenderla y aplicarla en casi cualquier situación. En este tutorial vamos a usar Java, que creo que es cómodo y fácil de usar.

Recomiendo para este tutorial, tener algún entorno de trabajo preparado para ejecutar programas en Java y ver los resultados por consola. Yo usaré NetBeans 7, pero podéis usar consola de Linux, o cualquier otro entorno en el que os sintáis cómodos.

Antes de ponernos a programar, vamos a hablar sobre las diferencias entre una función recursiva y una iterativa.

Una función iterativa es aquella función que sigue las líneas de código, una detrás de otra, quizá llamando a otra función, o entrando en un bucle.

Un ejemplo;

public static int factorial_iterativo(int num){
int fact = 1;
for(int i=1; i <= num; i++){
fact = fact * i;
}
return fact;
}

Una función muy simple, para calcular el factorial de un número que le llega por parámetro.

Una función recursiva es aquella que para llevar a cabo su cometido, se llama a si misma, una y otra vez, hasta que llega a un caso base (luego concretare que es un caso base), y devuelve el resultado. Vamos a hacer la misma función que antes pero en recursivo.

public static int factorial_recursivo(int num){
if(num < 2)
return 1;
return num*factorial_recursivo(num-1);
}

«Pero cómo funciona?» A eso voy, tranquilos ^_^.

El truco para poder hacer una función recursiva, es encontrar el caso base. Este caso base, determina cuando la función debe dejar de llamarse a si misma, y empezar a devolver valores. En este caso, nuestro caso base es cuando intentamos calcular el factorial de 1 (< 2), como sabemos que vale 1, entonces devolvemos ese valor.

El otro punto clave, es encontrar que devolver cuando no estamos en el caso base. Para este ejemplo, vamos a usar la lógica, Que es el factorial de un número? La multiplicación de ese número por la multiplicación del anterior y sucesivamente hasta el 1, o lo que es lo mismo, la multiplicación de ese número por su anterior, y vualá, ya tenemos que debemos devolver cuando no estamos en nuestro caso base.

Como ejercicio mental, intentad pensar, como sería una función recursiva para calcular la multiplicación de dos números naturales.

public static int multiplicacion_recursivo(int a, int b){
if(b<=0)
return 0;
return a + multiplicacion_recursivo(a, b-1);
}

Esta es una manera, y no digo que sea la única, es la que se me ha ocurrido a mi.

Y hasta aquí mi primer tutorial. Espero que os haya sido fácil entenderlo. Comentad por cualquier duda o error por mi parte! Gracias!