You are on page 1of 21

Universidad Nacional San Antonio

Abad del Cusco


Grupo de Usuarios Linux
Mosoq Kallpa (MKLUG)

Recursividad
Alex Oviedo Solis
(alexove@hotmail.com)
(alleinerWolf@gmail.com)
Contenido
Introduccin.
Sub-Programas.
Recursividad.
Algoritmo recurrente.
Clasificacin.
Ventajas y desventajas.
Implementacin.
Ejemplos de algoritmos recurrentes.
Introduccin
La recursividad es una Estructura Algoritmica,
util y poderosa que permite resolver muchos
problemas algoritmicos de manera sencilla y
elegante.
Los terminos Recursin y Recursividad son
comunmente usados en la informatica, pero en
terminos comunes se conocen como
Recurrencia.
Sub-Programas
Sus caracteristicas son:
Un Sub-Programa corresponde a la
implementacion de un modulo que sea una unidad
logica unica y diferenciada.
Su estructura debe de ser de caja negra, es decir:
Permite el ingreso de parametros de entrada.
Procesa en funcion de los parametros dados.
Devuelve resultados del proceso como parametros de
Salida.
Puede ser invocado desde el programa principal o
desde otro Sub-Programa.
Sub-Programas
Debe evitarse el uso de variables globales, pues el
paso de datos se da por medio de los parametros.
Cuando se invoca a un sub-programa:
Se guardan las direccion de la instruccion que
invoco el Sub-Programa.
Se transfiere el control al Sub-Programa,
asignandosele espacio de memoria para sus
variables y datos necesarios.
Se devuelven los resultados, y devuelve el control
al programa que invoco al sub-programa desde
donde se le interrumpio.
Recursividad
Recursion es la forma en la cual se puede
especificar un proceso en funcion de su propia
definicion.
Se dice que una funcion es recursiva, cuando
se puede definir en terminos de si misma.
Para ser ms claros, podemos decir que las
instancias complejas de un proceso se
expresan en instancias de menor complejidad,
de modo que al final las instancias simples se
definen explicitamente.
Recursividad

El cliente El mesero El cocinero


Algoritmo Recurrente
Es un algoritmo por el cual, el problema se
divide en Sub-Problemas del mismo tipo pero
de complejidad menor, de modo que al llegar a
una solucion conocida se puede obtener la
solucion general.
Este tipo de algoritmos tienen dos partes:
Caso Base: Es la solucion conocida, el caso ms
simple.
Caso Recurrente: El caso que recurre a otros
casos de menor complejidad.
Clasificacin
Por el numero de llamadas recursivas:
Lineal: Que contiene una sola llamada.
No Lineal: Que tiene varias llamadas recursivas.
Mutua: Que se llaman unas a otras.
Por el principio de Induccion requerido:
Estructural: Que su complejidad se reduce en 1.
No Estructural: Su complejidad se reduce en
terminos distintos de 1.
Ventajas y Desventajas
Ventajas:
Es sencilla de implementar.
Es una manera elegante de resolver un problema y
es efectiva.
Desventajas:
Necesitan muchos recursos.
Son lentos comparados con las otras estructuras
de programacion.
Son complejas de entender.
Implementacin
Se pueden implementar dentro de una funcion
o un procedimiento.
Se debe definir un caso base. Es un caso del
que se conoce una solucion, sino esta bien
definida puede hacerse infinito y en
consecuencia saldra error (Stack Overflow).
Se debe definir bien el caso o casos
recurrentes de modo que al final alcancen al
caso base.
Ejemplos de algoritmos recurrentes
Factorial:
Sabemos que el factorial se define como:
n!=n*(n-1)*(n-2)*.....*3*2*1
Si deseamos calcular 5!=5*4*3*2*1=120
Pero tambien podemos colocarlo de este modo
5!=5*4! 5!=5*24 = 120
4!=4*3! 4!=4*6 = 24
3!=3*2! 3!=3*2 =6
2!=2*1! 2!=2*1 =2
1!=1
Por definicion tenemos que 0 ! = 1 o 1!=1.
Ejemplos de algorirmos recurrentes
Como se ve en la diapositiva anterior el factorial
de 5 se puede expresar en terminos del
factorial de 4, y el factorial de 4 en terminos del
factorial de 3 y asi sucesivamente...., hasta
llegar al factorial de 1 que sabemos que es 1.
El modelo seria del siguiente modo:

Caso base
1 Si n=1
factorial(n)
Caso recurrente
n * factorial(n-1) Si n>1
Ejemplos de Algoritmos recurrentes
Y su implementacion en pascal seria del
siguiente modo:
Function factorial (n:integer):integer
Begin

if (n=1) then {Caso Base}


factorial:=1
else {Caso Recurrente}
factorial:=n*factorial(n-1);
End;
Ejemplos de Algoritmos recurrentes
Las torres de Hanoi: Se tienen 3 postes, en el
primero de ellos se encuentras 64 discos,
donde los discos pequeos estan encima de los
discos grandes, el problema consiste en mover
los 64 discos del primer al tercer poste usando
el segundo poste como intermedio, ademas de
que solo se puede mover un disco a la vez y no
debe de haber un disco pequeo debajo de uno
grande, es decir que los discos pequeos esten
sobre los discos grandes siempre.
Ejemplos de Algoritmos recurrentes
Si solo tomamos 3 discos, la estrategia seria la
siguiente:
Ejemplos de Algoritmos recurrentes
Ejemplos de Algoritmos recurrentes
Ejemplos de Algoritmos recurrentes
Luego de ver esto podemos formular el modelo
del algoritmo:

Caso Base
mover el disco 1 de inicio a fin Si n=1

Hanoi(n,inicio,fin)
Caso Recurrente
mover n-1 de inicio a auxiliar Si n>1
mover 1 de inicio a fin
mover n-1 de auxiliar a fin
Ejemplos de Algoritmos recurrentes
Codificacin
Procedure
hanoi(n:integer;inicio:integer;fin:integer)
Var
auxiliar:integer;
Begin
if n=1 then
writeln('mover de ',inicio,' a ',fin)
else
Begin
auxiliar:=6-inicio-fin;
hanoi(n-1,inicio,auxiliar);
hanoi(1,inicio,final);
hanoi(n-1,auxiliar,fin);
End;
End;
Gracias por su atencin
A mi tambien
me dio
hambre
grrrrr!!!
Tengo
que irme
volando

You might also like