Documentos de Académico
Documentos de Profesional
Documentos de Cultura
WORK PAPER #2
RECURSIVIDAD
PROGRAMACIÓN RECURSIVA
Crear una subrutina recursiva requiere principalmente la definición de un "caso base", y
entonces definir reglas para subdividir casos más complejos en el caso base. Para una
subrutina recursiva es esencial que con cada llamada recursiva, el problema se reduzca de
forma que al final llegue al caso base.
Algunos expertos clasifican la recursión como "generativa" o bien "estructural". La distinción se
hace según de donde provengan los datos con los que trabaja la subrutina. Si los datos
proceden de una estructura de datos similar a una lista, entonces la subrutina es
"estructuralmente recursiva"; en caso contrario, es "generativamente recursiva".
Muchos algoritmos populares generan una nueva cantidad de datos a partir de los datos
aportados y recurren a partir de ahí. HTDP (How To Design Programs), al español, "Cómo
diseñar programas", se refiere a esta variante como recursión generativa. Ejemplos de
recursión generativa incluyen: máximo común divisor, quicksort, búsqueda binaria, mergesort,
Método de Newton, fractales e integración adaptiva.
Suma Recursiva
Para convertir la suma en una función recursiva se la debe descomponer en algo más
elemental. Entonces surge la pregunta: ¿Qué operación puede ser más elemental que la suma?
Aunque no lo parezca la respuesta es muy simple: la suma se puede descomponer en conteos
de 1 en 1. Es decir, si se quiere sumar los números 5 y 3 se sabe que el resultado es 8, y se
podría llegar a ese mismo resultado, si en vez de sumar se descomponen las unidades que
componen al segundo número (en este caso el 3) en sus unidades correspondientes de la
siguiente manera: 8
(5+2)+1=8 6
SumaRecursiva
5
SumaRecursiva (5+1)+1=7
Pseudocódigo (recursivo):
función factorial:
input: entero n de forma que n >= 0
output: [n × (n-1) × (n-2) × … × 1]
1. if n es 0, return 1
2. else, return [ n × factorial(n-1) ]
end factorial
b4 = 4 * b3
= 4 * 3 * b2
= 4 * 3 * 2 * b1
= 4 * 3 * 2 * 1 * b0
=4*3*2*1*1
=4*3*2*1
=4*3*2
=4*6
= 24
Esta función factorial también puede describirse sin usar recursión haciendo uso de típicas
estructuras de bucle que se encuentran en lenguajes de programación imperativos:
Pseudocódigo (iterativo):
2. begin loop
1. si n es = 0, salir del loop
2. cambiar running_total a (running_total × n)
3. decrementar n
4. repetir el loop
3. return running_total
end factorial
CUESTIONARIO
1. ¿Qué es la recursividad?
2. Dar una definición de lo que son los
fractales. Investigar al respecto.
3. ¿Cuál es la diferencia entre las
funciones de recursividad de cola y las que no lo son?
4. ¿A qué se refiere la recursividad
directa y la recursividad indirecta?
5. Basándose en la función de la suma
recursiva, programe la función recursiva para la resta.
6. Programe la función recursiva para la
división.
7. Programe la función recursiva para el
algoritmo de Euclides.
8. Programe la función recursiva para la
4
potencia entera (3 = 81).