Documentos de Académico
Documentos de Profesional
Documentos de Cultura
23 - Recursividad
23 - Recursividad
<<
Recursividad
Concepto
La recursividad es una técnica de programación muy potente
y puede ser usada en lugar de la iteración.
Es un recurso que reduce la escritura de resolución de los
algoritmos, ocultando detalles de su solución.
Características
1. Condición de fin
Debe tener una condición de fin o paso base, el cual
no se resuelve con recursividad.
2. Paso recursivo
Debe tener una llamada recursiva a sí mismo,
actualizando los parámetros para un caso más
pequeño.
Ejemplo de recursividad
1 si n = 0
N! =
n * (n-1) * (n-2) * … * 1 si n > 0
1 si n = 0
N! =
n * (n-1)! si n > 0
cuerpo 1 * factorial(1 - 1)
si n = 0
2 * factorial(2 - 1)
factorial ← 1
sino 3 * factorial(3 - 1)
factorial ← n * factorial(n-1) 4 * factorial(4 - 1)
fin 5 * factorial(5 - 1)
Stack
Comparación de factorial
iterativo / recursivo
Factorial iterativo Factorial recursivo
function factorial (n: byte): cardinal; function factorial (n: byte): cardinal;
var cuerpo
fac: cardinal; si n = 0
i: byte; factorial ← 1
cuerpo sino
fac ← 1 factorial ← n * factorial(n-1)
si n > 0 entonces fin
para i ← n..1
fac ← fac * i
factorial ← fac
fin
Tres preguntas
1. La pregunta: Caso base
¿Hay una salida no recursiva del procedimiento o función, y
la rutina funciona correctamente para este caso <base>?
2. La pregunta: Llamada más pequeña
La respuesta a esta pregunta debe buscarse en los
parámetros actuales de la nueva llamada recursiva. ¿El valor
nuevo está decrementado y llega en algún momento al valor
de fin?
3. La pregunta: Caso general
¿Se obtiene un resultado correcto a partir de la
"fórmula / acción" empleada?
Ejemplo de error en
llamadas recursivas
Ventajas Desventajas
Tiempo
Ejercicio 2
Ejercicio 3
Ejercicio 7 (búsqueda binaria)