RECURSIVIDAD: COMPARATIVA RECURSIVIDAD VS BUCLE

En este ocasión presentamos un mismo ejercicio, pero realizado de dos maneras: bucle y recursiva.

En el anterior post de Recursividad, se mencionaba que una de las características que favorecía el usar esta técnica es que proporciona un código mas corto, y soluciones que mediante bucle no serían posibles o muy difíciles. 

 A continuación se describe paso a paso un ejemplo con Factorial de un número de ambas formas:


EJEMPLO


Para este ejercicio no necesitamos importar ninguna librería.


Creamos la clase principal, en este caso TDARecursividad2.

Dentro del main, creamos un objeto de la clase, aquí le hemos asignado objFactorial.

Crear dos mensajes para mostrar en consola:
    - Uno para mostrar el factorial mediante bucle.
    - Uno para mostrar el factorial mediante recursividad.

Concatenar al mensaje el objeto seguido del método que vamos a mostrar, y como argumento debe contener un número.



MEDIANTE BUCLE

Creamos un método de tipo public int, y como argumento recibirá un numero entero (n).

Declaramos una variable entera factor que será igual a uno.

Crear un if que indicará que si n es menor a cero, debe retornar cero.

Si no, crear un bucle while, y mientras n sea diferente de cero, el factor será igual a n multiplicándole el mismo factor.

Luego a n se le va restando de uno en uno.

Por último solo retornar factor.

La lógica de este método indica que en la primera corrida del programa, factor valdrá 1. Luego se ejecutará el while, y como nosotros anteriormente en el main, definimos un número(5) como parámetro para el método y éste es mayor a cero; entonces se ejecuta el factor = 1, n = 5 y se multiplica por el mismo factor dando como resultado = 5.

A n se le resta 1, entonces en la segunda corrida del while, n ya no vale 5, si no 4. Y así hasta que vale cero, y ya no se ejecuta más.
Por lo tanto nos va quedando una resta de este estilo 5*4*3*2*1 y cada numero se va multiplicando por el siguiente, quedando almacenado en factor.




MEDIANTE RECURSIVIDAD

Crear un método de tipo public int, y como argumento recibirá un número entero (n).

Luego un if con la condición de que si n es menor a cero, que retorne cero.

Si no, anidar otro if y mientras n sea igual a cero, que retorne uno. 
        Si no, que retorne n multiplicandolo por el mismo método y restándole uno.



Tenemos el numero n que vale 5. No entra en en los dos if, si no hasta el segundo else. Entonces retorna n(5) y lo multiplica por el argumento del método que es el mismo 5 y le resta uno.

Ahora n vale 4 y vuelve a ocurrir lo mismo, entra hasta el segundo else, retorna n(4), lo multiplica por 3 y así sucesivamente hasta llegar a cero.

Cuando llega a cero, entonces ya entra en el segundo if y retorna 1.









Este sería el resultado. De ambas formas se llega a lo mismo








Comentarios

Entradas populares de este blog

TIPOS DE DATOS ABSTRACTOS.

MEMORIA DINÁMICA

ELIMINAR UN NODO DEL INICIO