jueves, 27 de octubre de 2011

RECURSIVIDAD

Recursividad
La recursividad es una función que se llama a sí misma para dividir un problema en problemas más sencillos, el método recursivo debe estar compuesto de una caso base para el cual ya se conoce un resultado y una llamada al mismo método con una versión ligeramente más sencilla del problema inicial.


Ejemplo 1, factoriales:
Para todo n entero natural, se llama factorial n (n!) al producto de todos los enteros entre 1 y n:




n                              n!  
1111
22 × 1= 2 × 1!= 2
33 × 2 × 1= 3 × 2!= 6
44 × 3 × 2 × 1= 4 × 3!= 24
55 × 4 × 3 × 2 × 1= 5 × 4!= 120
6etcetc



Código para los factoriales:

code
1      
2
3
4
5
6
<BR>
public void factoriales(long n){<P></P>
<P> if(n==1) return 1;</P>
<P> else return n*factoriales(n-1);<BR>
}</P>
<P></P>

El método factoriales se llama a sí mismo disminuyendo cada vez el numero inicial en una unidad hasta que llega a valer 1 y por lo tanto alcanza el caso base, en ese momento se devuelven todas las llamadas recursivas realizas al método factoriales retornando el valor del actual multiplicado por el valor anterior.

Ejemplo 2, Fibonachi:
La sucesion de Fibonachi comienza por 0 y 1, y cada numero siguiente es la
suma de los dos anteriores:

0,1,1,2,3,5,8,13,21,34,55,8,9

Código:

code
1
2          
3
4
5
6
  <BR>
public void fibonachi(long n){<P></P>
<P> if(n==0 || n==1) return n;</P>
<P> else return fibonachi(n-2)+fibonachi(n-1);</P>
<P>}</P>
<P></P>



Este método esta compuesto de dos casos bases, y de dos llamadas recursivas al método, a esto se le denomina recursividad mútliple, a diferencia del método factoriales que sólo hace una llamada recursiva y se denomina recursividad simple. En ambos casos es de tipo directa, también es posible efectuar recursión indirectamente: una método puede llamar a otro quien, a su vez, acabe llamando al primero.




Programas

   public int Fibonacci (int n, int fibinf, int fibsup)
    {
    Scanner teclado = new Scanner (System.in);
        System.out.println("Ingrese El Numero");
        n = teclado.nextInt();
        System.out.println("-----------------");
        if ((n==0)||(n==1))
        {
            System.out.println("La Suma Es:"+n);
            return n;
        }
        fibinf=0;
        fibsup=1;
        for(int i=2; i<n; i++){
            int x;
            x= fibinf;
            fibinf = fibsup;
            fibsup = x + fibinf;
            System.out.println(""+fibsup);
        }
        return (fibsup);
    }
        public static void main(String[] args) {
        fibonacci1 fb = new fibonacci1 ();
       int n=0, fibinf=0, fibsup=0;
       fb.Fibonacci (n,fibinf,fibsup);
}
}


No hay comentarios:

Publicar un comentario