Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivos
Definir concepto de recursividad
Plantear su uso para formular soluciones a problemas que por sus
caractersticas requieren disear algoritmos que deben llamarse a si
mismos.
Presentar una estrategia de implementacin de problemas recursivos
Anlisis comparativo entre soluciones iterativas clsicas y las soluciones
recursivas
Recursividad
Premisas
Las definiciones recursivas suelen responder a funciones que
se definen en base a un caso menor de s mismas. Pero la
recursividad en programacin tiene otras implicaciones.
Substancial diferencia entre una funcin matemtica y un
funcin programada.
La recursividad en programacin, aunque est permitida en
prcticamente todos los lenguajes modernos, no es una
herramienta demasiado til en un entorno productivo.
Cundo debo utilizar entonces recursividad?
Definicin
La recursividad es una herramienta que permite
expresar la resolucin de un problema
evolutivos, donde es posible que un modulo de
software se invoque a s mismo en la solucin
del problema (Garland, 1986) (Helman, 1991)
(Aho, 1988).
Recursividad
Esta tcnica puede entenderse como un caso particular de la
programacin con subprogramas en la que se planteaba la resolucin de
un problema en trminos de otros subproblemas ms sencillos.
El concepto de recursin aparece en varias situaciones de la vida
cotidiana.
Otro tipo de recursin es la referente a los tipos de datos que se definen
en funcin de si mismos.
La recursin como herramienta de programacin permite definir un objeto
en trminos de si mismo. (listas circulares).
Funciones recursivas en matemtica
Una vez dividida la gua, y determinada la parte que contiene a la persona, el mtodo de
bsqueda a aplicar sobre esa mitad es el mismo que el empleado para la gua completa.
La mitad de la gua donde no esta el dato se descarta, lo cual significa una reduccin del
espacio del problema (eficiencia algortmica).
Hay un caso especial que se resuelve de una manera diferente que el resto, y sucede cuando
la gua queda reducida a una sola pgina (luego de varias subdivisiones).
Recursividad
Resumen de conceptos ya establecidos
Un razonamiento recursivo tiene dos partes: la base y la regla recursiva de construccin. La base no
es recursiva y es el punto tanto de partida como de terminacin de la definicin.
Premisas
1. El procedimiento se llama a si mismo
2. El problema se resuelve, resolviendo el mismo problema pero de tamao menor
3. La manera en la cual el tamao del problema disminuye asegura que el
caso
alcanzar.
base
se
El subprograma comienza a ejecutarse normalmente y, al llegar a la llamada, se reserva el espacio para una nueva copia de
sus objetos locales y parmetros. Estos datos particulares de cada ejemplar generado se agrupan en la llamada pila de
activacin del subprograma.
El nuevo ejemplar del subprograma pasa a ejecutarse sobre su pila de activacin, que se apila sobre las llamadas recursivas
anteriores formando la llama pila recursiva.
Este proceso termina cuando un ejemplar no genera mas llamadas recursivas por consistir sus argumentos en casos bsicos.
Entonces se libera el espacio reservado para la pila de activacin de ese ejemplar, reanudndose las instrucciones del
subprograma anterior sobre la tabla penltima.
Este proceso de retorno finaliza con la llamada inicial.
Recursividad Mutua
La recursin mutua es aquella propiedad en la que un programa
contiene dos procedimientos P1 y P2 tales que cada uno de ellos
incluye una llamada al otro. En el caso de Pascal se requiere que
uno de los dos procedimientos tenga una declaracin forward. Una
aplicacin prctica que contiene recursin mutua es:
El cdigo
R.M
Recursividad Infinita
Recursividad Infinita
Es muy importante que toda funcin recursiva
tenga un caso en el que no se llame a s misma, o
las llamadas seran infinitas y el programa no
tendra fin.
Por eso, siempre una funcin recursiva tiene una
condicin inicial en la que no debe llamarse a s
misma.
Ventajas y desventajas
Ventajas
Soluciones simples, claras
Soluciones elegantes.
Soluciones a problemas complejos.
Desventajas de la Recursin: INEFICIENCIA
Sobrecarga asociada con las llamadas a subalgoritmos
Una simple llamada puede generar un gran numero de llamadas recursivas.
(Fact(n) genera n llamadas recursivas)
La claridad compensa la sobrecarga?
El valor de la recursividad reside en el hecho de que se puede usar para resolver
problemas sin fcil solucin iterativa.
- La ineficiencia inherente de algunos algoritmos recursivos.
La recursividad se debe usar cuando sea realmente necesaria, es decir, cuando no exista
una solucin iterativa simple.
Conclusin
Se puede decir que la recursividad es una tcnica de programacin bastante
til y muy interesante de estudiar.
Recuerden que muchos problemas pueden resolverse con la misma facilidad
usando recursividad como iteracin.
En general para un mismo algoritmo, la recursividad permite una expresin
ms clara y sinttica lo que simplifica la comprensin y el mantenimiento del
mismo.
Las soluciones recursivas son normalmente menos eficientes, ya que
consumen ms tiempo (las invocaciones) y memoria (pila de activacin).
La recursividad es apropiada, tambin, cuando los datos involucrados en el
problema estn organizados en estructuras que pueden definirse
recursivamente, como listas, rboles, etc.
Las estrategias de resolucin de problemas denominada divide y vencers
o backtracking, son dos tcnicas muy utilizadas para la resolucin de
algoritmos complejos. Ambas utilizan recursividad.
BIBLIOGRAFIA. Especifica:
En internet
http://exa.unne.edu.ar/informatica/programacion1/public_html/
http://web.austral.edu.ar/austral-admisionesGradoingenieriaInformatica.asp
http://www.cepec.edu.ar/informatica.html?gclid=CMj29q_i6QCFdhA2godpQ0oHA
http://www.frgp.utn.edu.ar/carreras/tssi/index.php
http://www.mitecnologico.com/Main/RecursividadProgramacion
siendo 1 el caso base, que consiste en mover simplemente un disco sin generar llamada
recursiva. Ahora apreciamos claramente la naturaleza recursiva de proceso, pues para
pasar n discos es preciso pasar n-1 discos (dos veces), para n-1 habr que pasar n-2
(tambin dos veces) y as sucesivamente.