algoritmos recursivos con enfoque en java

8

Click here to load reader

description

practica de algoritmos recursivos

Transcript of algoritmos recursivos con enfoque en java

  • RECURSIVIDAD

    Alumno: Castro Maya Jess Christopher

    Christopher Castro

    Instituto Politcnico

    Nacional

    Escuela Superior de Computo

  • Recursividad Recursividad -Es un recurso que permite expresar soluciones simpleas a problemas

    - un objeto recursivo es aquel que se llama a si mismo

    -las estructuras de rboles son ejemplos del uso de recursividad

    -Ejemplo Factorial de un nmero

    Si n= entonces 5!

    5!=5*4!

    4!=4*3! Paso Recursivo

    3!=3*2!

    2!=2*1!

    1!=1*0! Paso Basico

    0!=1

    -para resolver un problema empleado recursividad se tienen dos condiciones

    1) Paso Bsico

    2) paso recursivo

    Por lo tanto

    1 si n=0 o n=1

    Ejemplo n!= n*n(n-1)! Si n>1

    Factorial de un nmero

    public int factorial (int num){ if(num==0||num==1){ return 1; } return num*factorial(num-1); }

  • 3.3 Recursividad directa e indirecta Recursividad directa el mismo mtodo se llama

    Metodo p(){

    .

    .

    .

    Return p()

    }

    Recursividad indirecta

    Se llama a si mismo mediante otro y viceversa

    Mtodo p(){

    Return q()

    }

    Metodo q(){

    Return p()

    }

    Ejemplo Fibonacci

    0 n=0 paso basico

    Fibonacci(n)= 1 n=1

    Fibonacci(n-1)+Fibonacci(n-2) n>1 //paso recursivo

    public int fibonacci(int num) { if (num == 0) { return 0; } else { if (num == 1) { return 1; } return fibonacci(num - 1) + fibonacci(num - 2); } }

  • Suma recursiva de un arreglo

    = []

    =1

    =0

    0 si TAM=0

    Sumar= arreglo[TAM-1]+sumar(arreglo,TAM-1]

    public int sumaRecursiva(int []arreglo,int TAM){ ///suma recursiva de u arreglo if(TAM==0){ return 0; } else{ return arreglo[TAM-1]+sumaRecursiva(arreglo, TAM-1); } }

  • Algoritmo de Euclides para 2 numeros M,N

    M si N=0;

    Euclides (m,n) Euclides(N,M%N)

    public int euclides(int m,int n){ if(n==0){ return m; } else{ return euclides(n,m%n); } }

  • Coeficientes binomiales

    1

    1 2 1

    1 2 3 2 1

    1 si coefBin(N,0) o coefBin(N,N)

    CoefBinomial(n,k)= coefBin(N-1,k)+coefBin(N-1,k-1) si N>k>0

    =

    !

    ! ( )!

    public int coefBinomial(int n, int k) { if ((k == 0) || (k == n)) { return 1; } return coefBinomial(n - 1, k - 1) + coefBinomial(n - 1, k); }

  • Impresin de los datos de un arreglo en orden y en orden inverso

    imprimir en orden si TAM!=0 entonces hacer

    imprimir (arreglo,TAM-1)//-1 porque java cuanta desde 0 y nosotros desde 1*/

    imprimir->(arreglo[TAM-1];

    Imprimir en desorden si TAM!=0 entonces hacer

    imprimir->(arreglo[TAM-1];

    imprimirIN(arreglo, TAM 1)

    la diferencia entre ambos es que el paso recursivo cambia de orden

    en este es al final

    public void imprimir(int arreglo[], int TAM) { if (TAM != 0) { imprimir(arreglo, TAM - 1); System.out.println(arreglo[TAM - 1]); } }

    public void imprimirIn(int arreglo[], int TAM) { if (TAM != 0) { System.out.println(arreglo[TAM - 1]); imprimirIn(arreglo, TAM - 1); } }

  • Ejemplos de ejecucin de los mtodos recursivos

    Conclusiones: La recursividad es una forma de programar

    eficientemente en algunos caso como en el factorial por

    ejemplo ya que sin recursividad este sera muy difcil y en

    otros caso muchas veces es inconveniente ya que

    podemos crear ms demanda de memoria