algoritmos recursivos con enfoque en java
Click here to load reader
-
Upload
cristopher-castro -
Category
Documents
-
view
7 -
download
1
description
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