Sunteți pe pagina 1din 26

Recursividad

Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Recursividad
Cristian Martinez
Algoritmos y Estructuras de Datos
Departamento de Informatica, UNSa, Argentina
1er Cuatrimestre 2013
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Outline
Motivacion
Introduccion
Modulos recursivos
Tipos de recursividad
Conclusiones
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Motivaci on
Revisar conceptos previos sobre recursividad.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Seg un el programa analtico vigente . . .
La Unidad 2 aborda los siguientes temas:

Deniciones previas

Tipos de recursividad

Propiedades de la recursividad

Tipos de datos recursivos

Manejo de memoria en ejecucion

Funciones y procedimientos recursivos

Aplicaciones
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
La recursividad o recursion es una tecnica de resolucion de
algunos problemas particulares. La denicion de un concepto
es recursiva si se dene en terminos de s mismo.
En matematica, se denomina recursion a la tecnica que
dene una funcion en terminos de s misma. Un ejemplo es
el de la funcion factorial:
! :
0

n! =

n(n 1)! si n > 0


1 si n = 0
Sigue . . .
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
La denicion del conjunto de los n umeros naturales, es otro
ejemplo de recursion:

1 pertenece a .

Si n pertenece a , (n+1) pertenece a .


Sigue . . .
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Partes de una denici on
Una denicion recursiva tiene dos partes:

Caso base o elemental: Existe uno o mas casos (de


tama no peque no) que se resuelven sin recursion. Es
decir, no necesita de la recursion para denirlo.
En el ejemplo de la funcion factorial sera 0!=1. Dos
casos base, para la sucesion de Fibonacci: f(0)=0,
f(1)=1.

Una denicion recursiva o caso general: Posee una o


mas deniciones de s misma dentro de la denicion.
Para la funcion factorial, la denicion recursiva sera
n! = n(n 1)!, n > 0. De esta manera n! se dene en
terminos de (n-1)!, el cual se dene en terminos de
(n-2)! y as hasta llegar a 0!, que es el caso base o valor
del dominio donde la recursion se detiene.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
A tener en cuenta
La mayora de los lenguajes de programacion soportan la
recursion, permitiendo que un modulo pueda invocarse a s
mismo. Algunos lenguajes funcionales (como Haskell) no
cuentan con construcciones sintacticas para soportar la
iteraciones, forzando a la construccion de soluciones
recursivas en vez de las repetitivas.
La recursividad es otra manera de implementar acciones
repetitivas.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Denici on
Un modulo (funcion, procedimiento, subrutina) es recursivo
si dentro del cuerpo del modulo, existe una invocacion
(llamada) a s mismo (lo que correspondera al caso general)
y uno o varios casos base que pueden resolverse sin
necesidad de recursion.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Importancia
Por que escribir modulos recursivos, si disponemos de
iteraciones?

Simple e intuitivo: a pesar que una solucion recursiva


puede reemplazarse por una iterativa.

Compacto: permite reducir modulos complejos y largos.


No obstante, no debemos abusar de la recursion. Trae
consigo, uso de memoria y esfuerzo en la depuracion de
errores.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Un ejemplo
factorial(n)
Si (n=0) entonces 1
Sino n*factorial(n-1)
La funcion anterior calcula el factorial de un n umero entero.
Tiene las siguientes partes:

Caso base: Si se cumple la condicion, la funcion


devuelve 1.

Caso general: Si no se cumple la condicion, la funcion


devuelve una invocacion recursiva (factorial(n-1)).
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Invocando la funci on recursiva
Que ocurre si invocamos la funcion factorial en un programa?
Podemos observar que para el calculo de 2! usando la
funcion antes denida, se realizan 3 llamadas de la funcion
(factorial(2), factorial(1), factorial(0)). Una vez alcanzado el
caso base, pueden calcularse los valores correspondientes a
las llamadas anteriores que quedaron pendientes de resolver.
Sigue . . .
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Invocando la funci on recursiva-2
La primera llamada (factorial(2)), se llama nuevamente con
parametro (n-1). Es decir, factorial(1).
La segunda llamada (factorial(1)), se llama nuevamente con
parametro (n-1). Es decir, factorial(0).
La tercera llamada (factorial(0)), devuelve 1. Volviendo
hacia atras, se pueden calcular los valores de las expresiones
pendientes.
Importante: Esto quiere decir que se deja pendiente el
calculo de la funcion hasta tanto se obtenga un valor
conocido para la misma. En nuestro caso, cuando se llega a
factorial(0).
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Otro ejemplo: la sucesi on de Fibonacci
Leonardo de Pisa o Fibonacci, en su Libro de Calculo
propuso el siguiente problema: Si un par de conejos son
puestos en un campo, y si los conejos maduran en un mes, y
si luego producen un nuevo par de conejos cada mes a partir
de ese momento. Cuantos pares de conejos se tendra en
doce meses?.
Se supone que los conejos no mueren ni se escapan. El
problema dio origen a la sucesion: 0,1,1,2,3,5,8,13,21,34,. . . .
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
La sucesi on de Fibonacci: denicion recursiva
Edouard Lucas le dio el nombre de n umeros de Fibonacci a
esta sucesion. Cada termino de la sucesion se calcula
sumando los dos anteriores, excepto los dos primeros. Cada
termino (n>0) de esta sucesion, se puede calcular por medio
de una denicion recursiva:
f (n) =

0 si n = 1
1 si n = 2
f (n 1) + f (n 2) si n > 2
La denicion recursiva tiene:

Caso base: en realidad, tiene 2. Esto permite obtener el


primer y segundo termino de la sucesion.

Caso general: tiene 2 deniciones de s misma. Esto


permite calcular cualquier termino (desde el 3ero en
adelante), sumando los dos anteriores inmediatos.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
La sucesi on de Fibonacci: funci on recursiva
bonacci(n)
Si (n=1) entonces 0
Sino Si (n=2) entonces 1
Sino bonacci(n-1) + bonacci(n-2)
Para calcular el termino enesimo de la sucesion f(n), primero
se debe calcular f(n-1) y f(n-2). Pero para ambos casos,
requieren el calculo de f(n-2) y f(n-3), f(n-3) y f(n-4), y as
sucesivamente.
Las llamadas que necesita f(n) para obtener el resultado
nal, pueden verse representadas mediante un arbol.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
La sucesi on de Fibonacci: invocacion
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Clasicacion
Seg un la forma en que ocurran las invocaciones (llamadas)
recursivas, las podemos clasicar en:

Recursividad lineal

Recursividad m ultiple
Otra clasicacion:

Recursividad directa

Recursividad indirecta
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Recursividad lineal
En el caso de la recursividad lineal, dentro del modulo
recursivo existe una unica invocacion a s mismo.
En general, los modulos (procedimientos/funciones)
recursivos lineales pueden transformarse de manera sencilla a
su version iterativa.
Un ejemplo es el caso de la funcion factorial.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Recursividad m ultiple
En el caso de la recursividad m ultiple, el modulo se invoca a
s mismo mas de una vez dentro de una misma activacion.
Es decir, en la denicion del caso general, aparece mas de
una invocacion recursiva.
La transformacion de estos modulos recursivos a su version
iterativa es mas difcil.
Un ejemplo es la sucesion de Fibonacci.
Sigue . . .
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Recursividad m ultiple-2
Una variante de la recursion m ultiple, es la recursion
anidada, que ocurre cuando dentro de una invocacion
recursiva ocurre como parametro otra invocacion recursiva.
ackerman(n,m)
Si (n=0) entonces m+1
Sino Si (m=0) entonces ackerman(n-1,1)
ackerman(n-1,ackerman(n,m-1))
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Recursividad directa
Los modulos que se llaman (invocan) a si mismos son de
tipo recursividad directa.
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Recursividad indirecta
La recursividad indirecta se produce cuando habiendo varios
modulos, se llaman unos a otros formando un ciclo.
A un as, es necesario disponer de al menos un punto de
parada de la recursion.
par(n)
Si (n=0) entonces Verdadero
Sino impar(n-1)
impar(n)
Si (n=0) entonces Falso
Sino par(n-1)
Suponiendo que tenemos un programa principal, que
unicamente invoca a la funcion par:

Que devuelve Par(7)?

Que devuelve Par(10)?


Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Conclusiones

Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Fin de la clase
Recursividad
Cristian Martinez
Temario
Motivacion
Introduccion
Modulos
recursivos
Tipos de
recursividad
Conclusiones
Aho, A. et al. (1988),Estructura de datos y
algoritmos, Addison Wesley.
Tenenbaum, A., Moshe, A. (1988), Estructura de datos
en Pascal,Prentice Hall.
Wirth, N. (1987), Algoritmos y Estructuras de
Datos,Prentice Hall.
Dale, N., Lilly, S. (1989), Pascal y Estructuras de
Datos, McGraw-Hill.

S-ar putea să vă placă și