Estructuras de Datos: Tema 2: Pilas y Colas. Anexo. Recursividad
Estructuras de Datos: Tema 2: Pilas y Colas. Anexo. Recursividad
Estructuras de Datos: Tema 2: Pilas y Colas. Anexo. Recursividad
Recursividad
1. Concepto de recursividad.
2. Ejemplos de métodos recursivos.
3. Tipos de recursividad.
4. Recursivo vs iterativo.
Pilas y colas > Recursividad 3
1. Concepto de recursividad
Un objeto es recursivo cuando forma parte de si mismo o de
su propia definición.
En matemáticas se usa para algunas definiciones:
• Definición de número natural:
o El 1 es un número natural.
o El siguiente de un número natural es un número natural.
• Definición de factorial de un número:
o El factorial de 0 es 1: 0! = 1
o El factorial de N es N! = N * (N-1)!
• Sucesión de Fibonacci:
o f (0) = 1;
o f (1) = 1;
o Para n > 1, f (n) = f (n-1) + f (n-2)
Pilas y colas > Recursividad 4
1. Concepto de recursividad
Recursividad en programación:
• Una función es recursiva cuando se llama a si misma.
• Un tipo de datos es recursivo cuando forma parte de su propia
definición.
• Planteamiento:
o Se descompone el problema en subproblemas más pequeños.
o Se localiza el caso más básico.
o Se identifica el camino para llegar al caso base haciendo una o varias
llamadas recursivas.
• Ejecución:
o Al menos una de las instrucciones de la función será una llamada a la
misma función.
o Se irán ejecutando copias de la función hasta que se alcance la condición
de fin de recursividad: caso base.
o Al finalizar cada llamada se retorna al punto donde se realizó la llamada
anterior.
Pilas y colas > Recursividad 5
Para dato = 4:
dato = 4 (dato>1)
resultado=dato*factorial(dato-1)
resultado = 4*6 = 24
dato = 3 (dato>1)
resultado=dato*factorial(dato-1)
resultado = 3*2 = 6
dato = 2 (dato>1)
resultado=dato*factorial(dato-1)
resultado = 2*1 = 2
dato = 1
resultado = 1
Pilas y colas > Recursividad 8
3. Tipos de recursividad
Recursividad directa:
• Se realizan llamadas a la misma función recursiva que se está
diseñando.
• A su vez puede ser:
o Simple: Solo existe una llamada recursiva dentro de la función (factorial)
o Múltiple: Se realiza más de una llamada recursiva (fibonacci)
o Anidada: la llamada recursiva aparece como un parámetro dentro de
otra llamada
Recursividad mutua o indirecta:
• El método llama a otro u otros métodos, y en el último método
se vuelve a llamar al primero
Pilas y colas > Recursividad 14
3. Tipos de recursividad
Ejemplo de recursividad anidada:
• Función de Ackermann
3. Tipos de recursividad
Ejemplo de recursividad mutua o indirecta:
• Comprobar si un número es par o impar recursivamente
public static boolean esPar (int n) {
boolean resul = true; El método esPar
if (n != 0) llama al método
resul = esImpar(n - 1); esImpar
return resul;
}
4. Recursivo vs iterativo
4. Recursivo vs iterativo
• Recursivo • Iterativo
o Mayor uso de memoria o Menor uso de memoria
o Mayor tiempo de ejecución o Menor tiempo de ejecución
o Código mucho más simple o Código más largo
o Posibilidad de marcha atrás o No hay posibilidad de marcha
• se puede realizar parte del atrás
tratamiento antes de la llamada
recursiva, y parte después
• se pueden mostrar los datos y
resultados antes y después de
la recursividad
o Los algoritmos de backtracking
y divide y vencerás son más
sencillos de forma recursiva.
Pilas y colas > Recursividad 18
4. Recursivo vs iterativo