Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recursividad 1 PDF
Recursividad 1 PDF
Recursividad
AED-LSU 1
Agenda
• Recursión
• ¿ Cómo funciona la Recursión ?
• Las Torres de Hanoi
• Algoritmos Recursivos
AED - LSU 2
Matrushka
• La Matrushka es una artesanía tradicional rusa. Es
una muñeca de madera que contiene otra muñeca
más pequeña dentro de sí. Ésta muñeca, también
contiene otra muñeca dentro. Y así, una dentro de
otra.
3
Recursividad: el concepto
• La recursividad es un concepto fundamental en
matemáticas y en computación.
• Es una alternativa para implementar estructuras
repetitivas (for, while).
• Es una técnica de programación en la que un método
se llama a si mismo.
• La recursión permite definir un objeto (funciones,
problemas, estructuras de datos) en términos de sí
mismo.
4
Recursión
• Ejemplos:
f(0) = 0 y f(x) = 2 f(x-1) + x2
3! = 3 * 2!
EDA - LSU 5
Recursión
La recursividad puede ser
Directa: Cuando el procedimiento se llama a si
mismo.
Proc. P
Llamada a P
EDA - LSU 6
Recursión
Indirecta Cuando la llamada no es directamente
a si mismo
Proc. P
Llamada a Q
Proc. P
Llamada a Q
Proc. Q
Proc. Q Llamada a V
Lamada a P
Llamada a P Proc. V
Llamada a Q
EDA - LSU 7
Recursividad
Para obtener una solución se deben cumplir las
siguientes condiciones:
Informática
Recursividad
– Caso recursivo:
– Una solución que involucra volver a utilizar la función
original, con parámetros que se acercan más al caso
base.
– Progresión, la llamada recursiva siempre debe
tender al caso base
Informática
Recursividad
– Los pasos que sigue el caso recursivo son los
siguientes:
1. El procedimiento se llama a sí mismo
2. El problema se resuelve, tratando el mismo
problema pero de tamaño menor
3. La manera en la cual el tamaño del problema
disminuye asegura que el caso base
eventualmente se alcanzará
10
Recursión
Ejemplo: Factorial de n
Por definición n! = 1*2*3*…*(n-1)*n
con 0! = 1 y 1! = 1
3! = 3*2!
2! = 2*1!
1! = 1*0! Caso base
0! = 1
Generalizando: n! = 1 si n= 0
n*(n-1)! si n > 0
EDA - LSU 11
Recursión
EDA - LSU 12
Ejemplo
Pseudocodigo Java
Funcion factorial (n) public int factorial(int n){
si n = 0 int resultado;
entonces resultado = 1 if (n==0)
sino
resultado = 1;
resultado = n * Factorial(n-1)
else
Fsi
resultado = n*factorial(n-1);
Retornar resultado
Fin funcion return resultado;
}
13
Ejemplo en Java
public int factorial(int n){ public int factorial(int n){ public int factorial(int n){
int resultado; int resultado; int resultado;
if (n == 0) if (n == 0) if (n == 0)
resultado = 1; resultado = 1; resultado = 1;
else else else
resultado = n * factorial(n-1); resultado = n * factorial(n-1); resultado = n * factorial(n-1);
return resultado; } return resultado; } return resultado; }
14
¿Cómo funciona la recursividad?
15
Recursión
• La recursión
– Permite crear algoritmos claros y concisos
– Es costosa en tiempo de ejecución y espacio
usado
• La recursividad se puede simular usando
algoritmos iterativos.
EDA - LSU 16
Como funciona la Recursividad
• Regla de diseño para funciones recursivas
Suponga que todas las llamadas recursivas
funcionan
EDA - LSU 17
Como funciona la Recursividad
EDA - LSU 18
Ejemplo
Paso N Pila Factorial
0 4
1 4 4 4 * fact(3)
2 3 4, 3 3 * fact(2)
3 2 4, 3, 2 2 * fact(1)
4 1 4, 3, 2, 1 1 * fact(0)
5 0 4, 3, 2, 1 1
6 1 4, 3, 2 1 * fact(0) = 1*1 = 1
7 2 4, 3 2 * fact(1) = 2*1 = 2
8 3 4 3 * fact(2) = 3*2 = 6
9 4 4 * fact(3) = 4*6 = 24
EDA - LSU 19
Como funciona la Recursividad
Internamente se utiliza una estructura tipo pila
para guardar valores de variables y constantes
locales del programa o subprograma que efectúa
la llamada.
EDA - LSU 20
Como funciona la Recursividad
– Se guarda una referencia a la siguiente
instrucción a ejecutar.
EDA - LSU 21
La alternativa iterativa
Metodo Factorial (n)
fact =1
mientras n > 0
fact =fact * n
n =n - 1
fmientras
retornar fact
Fin_metodo
EDA - LSU 22
Recursividad Indirecta
función Impar(N)
si n = 0 entonces Impar = falso
sino Impar = Par(N - 1)
finfunción
función Par(N)
si n = 0 entonces Par = falso
sino Par = Impar(N - 1)
Fin_función
EDA - LSU 23
Las Torres de Hanoi
Es un juego matemático que consiste en tres varillas
verticales y un número indeterminado de discos
que determinarán la complejidad de la solución.
No hay dos discos iguales y están colocados de
mayor a menor tamaño en una varilla, no se
puede colocar ningún disco mayor sobre uno
menor a él en ningún momento.
EDA - LSU 24
Las Torres de Hanoi
El juego consiste en pasar todos los discos de la
varilla A hacia la varilla C, colocados de mayor a
menor ascendentemente
Juego: http://www.uterra.com/juegos/torre_hanoi.htm
EDA - LSU 25
Recursividad de Cola
EDA - LSU 26
Recursividad de Cola
• Ejemplo:
public int fact(int n) {
if (n == 0)
return 1;
else
return fact(n - 1) * n;
}
EDA - LSU 27
Recursividad Anidada
EDA - LSU 28
Ejercicios
EDA - LSU 29
Ejercicios
Construir el pseudocodigo para el siguiente caso
fi(x,y)= 0 si i = 0
fi(x,y) = - xy+1 + yx-2- xy+3+yx-4-…. Si i> 0
EDA - LSU 30
Ejercicios
metodo funcionxy(i,x,y) →
si i = 0
entonces funcionxy = 0
sino si (i mod 2) = 0
entonces funcionxy=funcionxy(i-1,x,y)+yx-i
sino funcionxy=funcionxy(i-1,x,y)-xy+i
fsi
fsi
fmetodo
EDA - LSU 31