viernes, 20 de septiembre de 2013

FACTORIAL DE UN NUMERO

RECURSIVIDAD

Es una técnica utilizada en programación para realizar una función o procedimiento llamándose a sí misma. Para hacer más ententdible esta técnica realizaremos el siguiente problema:

Problema:
Calcular el factorial de un número.

Recordemos que para obtener el factorial de un número este se multiplica por todos los números naturales anteriores o iguales a el. Por ejemplo: 

5!= 1x2x3x4x5=120
4!= 1x2x3x4= 24

Nota: Para realizar este algoritmo usaremos dos clases: una que realice el factorial y otra que la ejecute.

1ra. Clase: Factorial.

  • Diagrama UML:











  • Programa
package FactorialDeUnNumero;
import javax.swing.JOptionPane;
public class Factorial {
    private int fact;//se declaran variables
    private int numero;
    //se encapsulan las variables
    public int getFactorial() {
        return fact;
    }
    public void setFactorial(int factorial) {
        this.fact = fact;
    }
    public int getNumero() {
        return numero;
    }
    public void setNumero(int numero) {
        this.numero = numero;
    }
    public void Captura(){
    numero=Integer.parseInt(JOptionPane.showInputDialog("NUMERO A CALCULAR: "));//se captura el numero a calcular
    }
    public int CalcularFactorial(int num){//utilizaremos un parámetro de tipo entero
     if(num==1 || num==0) /* como lo dice la regla de factorial: si numero es igual a cero o a 1, entonces su factorial es igual a 1*/
          {
            return 1; //si se cumple la condición se 1
          }
     else // si no se cumple, se realizara la operación siguiente
          {
/* y aquí es donde se encuentra la técnica recursiva, consiste en multiplicar el valor dado por el mismo menos 1; por ejemplo, si el valor es 5, entonces multiplicará 5 por 5-1, osea 5 por 4, y posteriormente el resultado se multiplicará por 4-1, osea, 3; y así sucesivamente hasta que el resultado se multiplique por 2-1, osea 1. */
            fact=num*CalcularFactorial(num-1);
            return fact;                      
          }                                   
    }                                        
    public void ImprimirFactorial(){          
    JOptionPane.showMessageDialog(null,"EL FACTORIAL DE "+numero+" ES "+fact);    
    }
}

2da. Clase: Solución.

  • Diagrama UML:













  • Programa
package FactorialDeUnNumero;
import javax.swing.JOptionPane;
public class Solucion {
    public static void main(String arg[]){
     Factorial n;// se declaran las variables
     n= new Factorial();//se crean las variables
    
     n.Captura(); // los objetos hacen el llamado a los métodos
     n.CalcularFactorial(n.getNumero());
     n.ImprimirFactorial();
     
    }
}

Ejecutar el programa


Insertamos el número a calcular....

.. en otra ventana nos mostrara el resultado.





Conclusión:
La técnica recursiva es un poco complicada de entender, basta con un poco de práctica para entenderla en su totalidad.  Hemos aprendido a realizar el factorial de un número por medio de un programa estructurado, una vez más demostramos que dividiendo las clases en diferentes métodos, el entendimiento de el mismo es más sencillo.

3 comentarios: