Recursividad, algo realmente interesante y complejo para aquellos usuarios que comienzan con este paradigma. La recursividad se puede definir como: Un metodo que se llama asi mismo.

Sin embargo, para realizar esto debes de cumplir ciertas «restricciones» pues de no hacerlo, el llamado podría realizarse de manera infinita y este se ejecutaría hasta consumir todos los recursos de la memoria. Por este motivo siembre se debe tener un caso base.

¿Que es un caso base?

El caso base (con la palabra podrías darte una idea) es el punto donde sabes que debes detenerte (en este caso el propio metodo debe saber cuando detener las llamadas que se hace a el mismo).

Se recomienda aplicar la recursividad a problemas pequeños o problemas complejos en los cuales realmente facilite el análisis del funcionamiento en comparación a otro tipo de implementación. Ademas, la recursividad en algunos casos puede simplificar el código reduciendo varias lineas.

A continuación te mostrare un ejemplo comun en recursividad, el factorial:

Primero lo implementaremos utilizando recursividad:

    public int calculaFactorial(int num) {
        if (num == 0) {
            return 1;
        } else {
            return num * calculaFactorial(num - 1);
        }
    }

Ahora sin utilizar recursividad:

    public int calculaFactorialCiclo(int num) {

        int fact_acum = 0;

        if (num == 0) {
            return 1;
        } else {

            while (num != 0) {
                fact_acum = fact_acum * num;
                num--;
            }

            return fact_acum;

        }

    }

El caso base para el factorial es cuando la variable num es igual a cero. Esto debe ser asi ya que en matemáticas sabemos que el factorial de cero es uno.

Explicare de manera breve como funciona el metodo recursivo y dejare una imagen que te ayudara a comprender. Para ello realizamos la siguiente llamada al metodo y le pasamos por parametro el numero 5.

calculaFactorial(5);

El metodo recursivo lo primero que hace es preguntar si num es igual a cero, en este caso num vale 5 por lo tanto no se cumple y en caso de no cumplirse la condición debe retornar un valor, analicemos detenidamente la siguiente linea:

return num * calculaFactorial(num – 1);

devuelve 5 * calculaFactorial(5-1);

Sabemos que el metodo devuelve un dato de tipo entero y como se esta llamando asi mismo hace lo siguiente:

return 5 * 4!;

La llamada recursiva del metodo, podemos observarla de manera facil de esta forma. Sin embargo, se podría decir que aun no ejecuta la operación, debido a que las operaciones son realizadas cuando se ha llegado al caso base. Por lo que, una vez que num sea igual a cero se cumple la primera condición y devuelve uno.

Como ahora no se hace un llamado recursivo, se sabe que a llegado a su fin (caso base) y debe comenzar a realizar todas las operaciones pendientes. Esto se podrá observar mejor en la siguiente imagen:

Finalmente podrás observar que la diferencia entre el metodo recursivo y no recursivo es notable, no se tú pero a mi me parece mas complejo la creación del metodo sin recursividad ademas de tener mas lineas de codigo.