11/05/2016

Ejercicio 31

Elabore un algoritmo que calcule el factorial de un número utilizando únicamente una función recursiva.

Bien vamos a entender esto: supongamos que queremos calcular el factorial de 5 que es igual 120, si nosotros vamos a utilizar una función recursiva, esto es lo que hará el programa gráficamente al momento de ejecutar:

Primero el main se ejecuta, pedimos el numero y lo guardamos en una variable. Finalmente en el cout se llama al metodo factorial() y se le asigna como parametro el numero que ingresamos (en este caso 5). El metodo factorial(5) se llamara así misma 5 veces hasta que su parametro (5) llegue a 1, cuando ese parametro llegue a 1 entonces retornara el valor de 1, porque el factorial de 1 es 1. Ahora como ya sabemos que ha llegado a su límite y ya sabemos el valor de factorial(1) = 1, ahora la función calcula el factorial en 2, 3, 4 y 5 veamos esto gráficamente:
factorial(2) = 2 * factorial(1) = 2

factorial(3) = 3 * factorial(2) = 6

factorial(4) = 4 * factorial(3) = 6

factorial(5) = 5 * factorial(4) = 120

Se muestra el resultado en pantalla con el cout:

Espero que esta explicación haya sido de ayuda para entender la recursividad, aqui esta el codigo:


#include <iostream>
// se incluye la clase Recursividad para despues llamar a sus metodos 
#include "Recursividad.h"

using namespace std;

int main(void)
{
    // se crea un objeto de la clase Recursividad (Instanciaciación) 
    Recursividad *obj = new Recursividad();
    // declaramos la variable num de tipo entero 
    int num;
    // pedimos al usuario que digite el número 
    cout << "Digite numero: ";
    // guardamos el número en la variable num 
    cin >> num;
    // mostramos el factorial del número llamando al metodo factorial() y le asignamos como parametro la variable "num" 
    cout << "El factorial de " << num << " es: " << obj->factorial(num) << endl;
}

#ifndef RECURSIVIDAD_H
#define RECURSIVIDAD_H


class Recursividad
{
    public:
        Recursividad();
        virtual ~Recursividad();
        // se declara el metodo para calcular el factorial de tipo entero y se pedira un parametro de tipo entero 
        int factorial(int n);
    protected:

    private:
};

#endif // RECURSIVIDAD_H

#include "Recursividad.h"

Recursividad::Recursividad()
{
    //ctor 
}

Recursividad::~Recursividad()
{
    //dtor 
}

int Recursividad::factorial(int n)
{
    if (n == 1)
    {
        return 1;
    }
    else
    {
        return n * factorial(n-1);
    }
}

//Se importa paquete "JOptionPane" para dibujar un cuadro de dialogo en pantalla
//que muestre información o para llenar información. 
import javax.swing.JOptionPane;

public class Main
{
    public static void main(String[] args)
    {
        // se crea un objeto de la clase Recursividad (Instanciaciación) 
        Recursividad obj = new Recursividad();
        // pedimos el numero y lo capturamos en la variable num de tipo entero 
        int num = Integer.parseInt(JOptionPane.showInputDialog("Digite numero: "));
        // mostramos el factorial del número llamando al metodo factorial() y le asignamos como parametro la variable "num" 
        JOptionPane.showMessageDialog(null, "El factorial de " + num + " es: " + obj.factorial(num));
    }
}

public class Recursividad
{
    public int factorial(int n)
    {
        if (n == 1)
        {
            return 1;
        }
        else
        {
            return n * factorial(n-1);
        }
    }
}