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);
}
}
}