lunes, 27 de agosto de 2012

Algoritmos Recursivos

Como programadores, todos conocemos los métodos iterativos. Los más generales, son los generados a partir de estructuras de control como el while, el for, el do while y otros que puedan existir en diferentes lenguajes. Sin embargo existen otros algoritmos que llamamos recursivos, que al igual que los iterativos generan un bucle en busca de la solución a un problema, para el cual es necesario hacer repeticiones. 

Tengamos en cuenta que un método recursivos es un método que se llama así mismo, es un método que se define en terminos de lo que es. Siempre es complicado entender esto, pero hoy veremos ejemplos sencillos que nos den una idea la recursión. Sin embargo, ¿qué debemos elegir, recursión o iteración?. La recursión es un proceso más elaborado que fundamenta algoritmos más complejos como el bactracking y algoritmos para la inteligencia artificial (IA). Sin embargo es código que consume bastantes recursos, es decir, consume mucha memoria, ya que por cada llamado de un método recursivo, se están realizando n veces el mismo proceso. ¿Pero si es un método que se llama así mismo, cuando acaba?. Para programar un método recursivo, es obligatorio crear una condición de escape, al igual que se hace en un while, o un for o un do while. A continuación veremos dos formas de generar el factorial de un número de manera iterativa y recursiva.

Para los que no saben, el factorial de un número, que se define como n!; es la multiplicación de todos los números naturales hasta el número en cuestión, es decir,

n!= 1*2*3*....*n 

El siguiente código esta hecho en lenguaje de programación java, en el IDE Netbeans 6.9 que pueden obtener aquí http://netbeans.org/. Pero no se preocupen, que igualmente funciona en cualquier otro lenguaje.

Ejemplo 1: Método iterativo para obtener el factorial de un número
public class ejemplo{
public static void main(String[] args) {//Método main
        Scanner scan= new Scanner(System.in);//Objeto lector de datos
        int n;//Variable que representa el número al cual se le calculará el factorial
        System.out.println("Ingrese un numero: ");
        n=scan.nextInt();//Lectura del número ingresado por el usuario

        if(n==0)
            return 1;//El factorial de 0 es 1
        else
        {
            int x=1;//Acumulador
            for(int i=1;i<=n;i++)//Cálucla el factorial de un número iterando hasta n
                x*=i;//Igual a x=x*i;
            return x;
        }
        System.out.println("El factorial de "+n+" es: "+ x);//Muestra el número en consola

    }

}
Ejemplo 2: Método recursivo para obtener el factorial de un número
public class ejemplo2{

public static void main(String[] args) {//Método main
        Scanner scan= new Scanner(System.in);//Objeto lector de datos
        int n;//Variable que representa el número al cual se le calculará el factorial
        System.out.println("Ingrese un numero: ");
        n=scan.nextInt();//Lectura del número ingresado por el usuario

         int factorial=factorialRecursivo(n);//LLamada al método recursivo para calcular el factorial de un número
       System.out.println("El factorial de "+n+" es: "+ factorial);//Muestra el número en consola

    }
     public static int factorialRecursivo(int n){
     if(n==0||n==1)//Condición de escape, el factorial de 1 o de 0 siempre es 1. Acaba la recursión. Fin del ciclo
          return 1;
     else
          return n*factorialRecursivo(n-1);//Continua calculando el factorial buscando el factorial del número anterior n-1
     }
}


ÉXITOS PROGRAMANDO AMIGOS MÍOS





No hay comentarios:

Publicar un comentario