recursividad-carla_vairetti.pdf
Post on 07-Nov-2015
223 Views
Preview:
TRANSCRIPT
-
RecursionRecursividad en Java
Resumen
IIC1103 - Introduccion a la Programacion - S1Recursion
Carla Vairetticvairetti@gmail.com
Pontifcia Universidad Catolica
27 de Mayo de 2010
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
Esquema
1 RecursionMotivacion
2 Recursividad en JavaEjemplosEjemplos para pensar
3 Resumen
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
Esquema
1 RecursionMotivacion
2 Recursividad en JavaEjemplosEjemplos para pensar
3 Resumen
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
Esquema
1 RecursionMotivacion
2 Recursividad en JavaEjemplosEjemplos para pensar
3 Resumen
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Esquema
1 RecursionMotivacion
2 Recursividad en JavaEjemplosEjemplos para pensar
3 Resumen
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Motivacion
Definicion
Una definicion Recursiva se establece un hecho en terminos delmismo hecho que se esta definiendo.
La definicion involucra:
Un Caso Base, en el que se definen los hechos mas simples, y
Un Caso recursivo en el que se definen hechos mascomplejos a partir de los simples.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Motivacion
Imagen recursiva formada por un triangulo. Cada trianguloesta compuesto de otros mas pequenos, compuestos a su vez de lamisma estructura recursiva.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Motivacion
Definicion
Recursion o recursividad es la forma en la cual se especifica unproceso basado en su propia definicion.
Ejemplo
Un ejemplo de conjunto definido de forma recurrente es el de losnumeros naturales:
Si 0 pertenece a N
Si n pertenece a N, entonces n-1 pertenece a N
Los numeros naturales es el conjunto de numeros enteros positivos.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Ejemplos
Pensemos en elfactorial de un numero.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Ejemplos
Factorial de un numero.
Definicion RecursivaBASE : 1! = 1RECURSIVIDAD: n!= n x (n-1)!
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
ResumenMotivacion
Ejemplos: Factorial
Con esta definicion veamos como funciona esta funcion para elvalor del factorial de 3:
Ejemplo
3! = 3 x (3-1)!= 3 x 2!= 3 x 2 x (2-1)!= 3 x 2 x 1!= 3 x 2 x 1 x (1-1)!= 3 x 2 x 1 x 0!= 3 x 2 x 1 x 1= 6
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Recursividad en Java
En java un metodo recursivo lleva a cabo alguna tareautilizando llamados al mismo metodo se utiliza a s mismopara completar una tarea.
El uso de parametros es fundamental para implementar unmetodo recursivo
Permiten distinguir el caso base y el paso de recursividad.
De esta forma repetiremos llamados a un mismo metodo condistintos parametros hasta encontrar algun caso base.
Por esta razon, la recursividad se utiliza como una alternativapara la iteracion.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Recursividad en Java
Para implementar un metodo recursivo es necesario estableceruno o mas casos base, cuya solucion es expedita, sin mayorprocesamiento. En estos casos es que la recursividad sedetendra y no se haran mas llamados al metodo.
Asimismo, es necesario definir la forma en que los problemasmas complejos pueden resolverse en terminos de un problemamas simple, es decir, el paso de recursividad.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Recursividad en Java
Por lo general, los metodos recursivos van a tener la siguienteforma:
Ejemplo
if (caso-base)resuelvalo
else {redefina el problema utilizando recursividady la solucion de un problema mas simple
}
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Esquema
1 RecursionMotivacion
2 Recursividad en JavaEjemplosEjemplos para pensar
3 Resumen
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo factorial
Ejemplo
public long Factorial(int n) {if (n == 1) {
return(1);}else {
return(n x Factorial(n-1));}
}
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Pensemos en lapotencia de un numero.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Potencia de un numero.
n=0! 1
n>0! x*Potencia(x,n-1)
Potencia(x,n)
Definicion RecursivaBASE : 1RECURSIVIDAD: x*Potencia(x,n-1)
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo potencia
Ejemplo
public long potencia(long x, int n) {if (n == 0) {
return(1);}else {
return(x*potencia(x,n-1));}
}
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Pensemos en ladivision enteraentre numeros.
14 : 3 = ?
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Pensemos en la division entera entre numeros.
b>a! 0 a=b!1
a>b! 1+div(a-b,b)
div(a,b)
Ejemplo
14 : 3 = ?14 - 3 = 1111 - 3 = 88 - 3 = 55 - 3 = 2
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo division entera
Ejemplo
public int div(int a, int b) {int res=0;if (b >a) {
res= 0;}if (a == b) {
res= 1;}if (a > b) {
res=1+div(a-b,b);}return res;
}Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Pensemos en fibonacci de un numero.
n=0! 0 n=1!1
n>1! Fib(n-1)+Fib(n-2)
Fib(n)
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo fibonacci
Ejemplo
public int fibo(int n) {int res=0;if (n == 0) {
res= 0;}if (n == 1) {
res= 1;}if (n > 1) {
res=(fibo(n-1)+fibo(n-2));}return res;
}Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo fibonacci
Fib(5)
Fib(4) Fib(3)
Fib(2) Fib(3) Fib(1) Fib(2)
Fib(0) Fib(1) Fib(1) Fib(2) Fib(0) Fib(1)
Fib(0) Fib(1)
0 1
1
1
2
0 1
1
3
0 1
1
1
2
5
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Esquema
1 RecursionMotivacion
2 Recursividad en JavaEjemplosEjemplos para pensar
3 Resumen
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo palndrome
Un palndromo es una palabra que se escribe igual tanto deizquierda a derecha como al reves.
Ejemplo
ALA ALLA SACAS ANANA
X Y
X Es palndromo
X Es palndromo si X==Y Y
Si X==Y ver si Z es palndromo
Z
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo Palindrome
Ejemplo
public class Palindrome {private String pal;public Palindrome(String initPal) {
pal = initPal.toUpperCase();}public boolean isPalindrome() {
...}
}
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo Palindrome
Ejemplo
public boolean isPalindrome(){if (pal.length()
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplo Palindrome
Ejemplo
public static void main(String[] args) {Palindrome p1 = new Palindrome(Madam);System.out.println(p1.isPalindrome());Palindrome p2 = new Palindrome(Nope!);System.out.println(p2.isPalindrome());Palindrome p3 = new Palindrome(dad);System.out.println(p3.isPalindrome());Palindrome p4 = new Palindrome(anana);System.out.println(p4.isPalindrome());
}false false true true
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Pensemos en la sumade los N primeros
numeros
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos
Pensemos en la suma de los N primeros numeros.
n=1 ! 1
n>1! n+Suma(n-1)
Suma(n)
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Las Torres de Hanoi es un rompecabezas o juego matematicoinventado en 1883 por el matematico frances Eduard Lucas.
Consiste en tres varillas verticales y un numero indeterminadode discos que determinaran la complejidad de la solucion.
No hay dos discos iguales, estan colocados de mayor a menoren la primera varilla ascendentemente, y no se puede colocarningun disco mayor sobre uno menor a el en ningun momento.
El juego consiste en pasar todos los discos a la tercera varillacolocados de mayor a menor ascendentemente.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Las reglas son:
Solo se puede mover un disco cada vez.
Un disco de mayor tamano no puede descansar sobre uno maspequeno que el mismo.
Solo puedes desplazar el disco que se encuentre arriba en cadavarilla.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
As:
1 Para 1 disco hace falta 1 movimiento
2 Para 2 discos hacen falta 3 movimientos
3 Para 3 discos hacen falta 7 movimientos
4 Para 4 discos hacen falta 15 movimientos
La formula para encontrar el numero de movimientosnecesarios para transferir n discos del poste A al poste C es:2n 1.A partir de esta formula puede verse que si a los sacerdotesles tomaba tan solo un segundo hacer un movimiento, en totalgastaran 264 1 segundos, es decir, 584.942.417.355 anos.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Ejemplos: Torre de Hanoid
Ejemplo
public void torresDeHanoid(int N, //numero de discosint de, //estaca de origenint hacia, //estaca de destinoint reserva) //estaca media{
if (N == 1) {mueveUno(de, hacia);
} else {torresDeHanoid(N-1, de, reserva, hacia);mueveUno(de, hacia);torresDeHanoid(N-1, reserva, hacia, de);
}}
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Busqueda Binaria
RestriccionLos elementos de la lista deben estar previamente ordenados.
Algoritmo (asumiento orden ascendente)1 Si el largo de la lista es 0 el programa termina.2 Se calcula el ndice del elemento central.3 Se compara el elemento buscado con el elemento central.
1 Si el elemento buscado es mayor al central, se vuelve al paso1, pero con la sublista [central + 1, largo].
2 Si el elemento buscado es menor al central, se vuelve al paso1, pero con la sublista [0, central 1].
3 Si el elemento buscado es igual al central se retorna el ndicede este. Encontro el elemento.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Busqueda Binaria
Declaracion
public int busquedaBinaria ( String [ ] lista , String buscado ) {int inicial = 0;int final = lista.length - 1;while ( inicial < final ) {
int central = ( inicial + final )/2;if( buscado.compareTo(lista[central]) > 0){
inicial = central + 1; }else if( buscado.compareTo(lista [central]) < 0){
final = central - 1; }else{ return central; }
}return -1;
}Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
EjemplosEjemplos para pensar
Busqueda Binaria
Como lo transformamos a un proceso recursivo?Nos alcanzan los parametros?
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
Resumen
Recursion o recursividad es la forma en la cual se especificaun proceso basado en su propia definicion.
Una definicion Recursiva se establece un hecho en terminosdel mismo hecho que se esta definiendo.
La definicion involucra:Un Caso Base, en el que se definen los hechos mas simples, yUn Caso recursivo en el que se definen hechos mas complejosa partir de los simples.
Euclides IIC1103 - Introduccion a la Programacion - S1
-
RecursionRecursividad en Java
Resumen
Consultas
Euclides IIC1103 - Introduccion a la Programacion - S1
top related