Está en la página 1de 12

ALGORITMOS RECURSIVOS

ALGORITMOS RECURSIVOS.
Un algoritmo recursivo es un algoritmo que exresa la soluci!n "e un ro#lema en
t$rminos "e una llama"a a s% mismo. La llama"a a s% mismo se conoce como llama"a
recursiva o recurrente.
&U'CI(' &actorial)n*
VAR resulta"o+ Entero

SI )n,-* E'TO'CES
resulta"o . /0
SI'O
resulta"o . n 1 &actorial)n2/*0
&SI

RETOR'A resulta"o0
&I' &U'CI('
Generalmente3 si la rimera llama"a al su#rograma se lantea so#re un ro#lema "e
tama4o u or"en '3 ca"a nueva e5ecuci!n recurrente "el mismo se lantear6 so#re
ro#lemas3 "e igual naturale7a que el original3 ero "e un tama4o menor que '. 8e esta
9orma3 al ir re"ucien"o rogresivamente la comle5i"a" "el ro#lema a resolver3 llegar6
un momento en que su resoluci!n sea m6s o menos trivial )o3 al menos3 su:cientemente
mane5a#le como ara resolverlo "e 9orma no recursiva*. En esa situaci!n "iremos que
estamos ante un caso #ase "e la recursivi"a".
Las claves ara construir un su#rograma recurrente son+
Ca"a llama"a recurrente se "e#er%a "e:nir so#re un ro#lema "e menor
comle5i"a" )algo m6s 96cil "e resolver*.
;a "e existir al menos un caso #ase ara evitar que la recurrencia sea in:nita.
Es 9recuente que los algoritmos recurrentes sean m6s ine:cientes en tiemo que los
iterativos aunque suelen ser muc<o m6s #reves en esacio.
COLAS.
Una cola3 es una estructura en la cual se almacenan elementos )en or"en "e llega"a*3
es "ecir que3 se ingresan los elementos or la arte :nal "e la estructura = se eliminan
)o se sirven* or la arte "el 9rente.
Como ue"e o#servarse3 $sta estructura cuenta con "os aunta"ores3 uno que aunta
al >ltimo elemento = otro que aunta <acia el rimer elemento )o el elemento "el
9rente*.
Se "e#e tener en cuenta que3 una cola3 almacena los "atos en ella3 mantenien"o cierto
or"en3 =a que sus elementos se a4a"en or el :nal "e la cola = se extraen o se
eliminan or la arte "e 9rente.
El lector "isersar6 el or que la insistencia "e ello3 ero cuan"o uno inicia este
estu"io3 al momento "e rogramar3 se con9un"e 96cilmente3 or que las sentencias "e
las 9unciones son mu= areci"as a la "e una ila3 = en algunas ocasiones me asa#a
que eme7a#a rograman"o una cola3 ero termina#a 9uncionan"o como ila.
Las oeraciones con las colas son+
2insert )q3 x* Inserta el elemento x en la arte osterior "e la cola q
2remove)q* Surime el elemento "elantero "e la cola q
2emt=)q* Retorna True o 9alse3 si la cola tiene elementos o no.
Las colas ue"en imlementarse3 al igual que las ilas3 me"iante "os 9ormas+
Arreglos
Memoria 8in6mica
Algoritmo ?ara A4a"ir elementos en la cola
Si la cola est6 vac%a+
/. ?untero rimero = untero >ltimo "e#en auntar a 'ULL.
-. Creamos el nuevo no"o )con a=u"a "e malloc)* *
@. Luego la arte siguiente "el nuevo no"o3 "e#e auntar a 'ULL
A. Tanto3 rimero = ultimo "e#en auntar3 al nuevo no"o.
Si la cola3 tiene elementos+
Creamos el nuevo no"o3 =a sea en la misma 9unci!n o con a=u"a "e otra
9unci!n .
;acemos que la arte siguiente "el no"o aunte a 'ULL.
Luego3 la arte siguiente "e ultimo3 "e#a auntar al no"o.
B ultimo3 a<ora "e#e auntar al no"o.
Algoritmo ?ara eliminar
Guar"ar el elemento "ato no"o en una varia#le temoral
colocar un aunta"or temoral <acia el no"o rimero "e la cola
cam#iar el untero )<acia el no"o* rimero3 <acia el no"o <acia el cual aunta el
no"o3 que esta#a al 9rente "e la cola
si "esu$s "e eso el aunta"or rimero es 'ULL entonces no <a= m6s "atos en la
cola = el aunta"or ultimo tam#i$n "e#e auntar a 'ULL
Li#erar memoria aunta"a or el aunta"or temoral
"evolver el valor guar"a"o en la varia#le temoral
E5emlo //./
Se "esea almacenar cierto n>mero "e enteros en una estructura "e tio Cola3 "ise4e
una soluci!n que ermita3 leer3 eliminar "atos "e la cola.
Cinclu"e ,st"io.<D
Cinclu"e ,conio.<D
Cinclu"e ,st"li#.<D

E1"eclaracion "e la cola1E
struct no"o
F
int elemento0
struct no"o 1siguiente0
G0
t=e"e9 struct no"o 'o"o0
t=e"e9 struct
F
'o"o 19rente0
'o"o 1:nal0
GCola0
E1"eclaracion "e las 9unciones1E
voi" CrearCola)Cola 1cola*0
voi" insert )Cola 1cola3 int x*0
int remover)Cola 1cola*0
int emt=)Cola cola*0
main)*
F
int x3 oc.H3 5.I0
Cola cola0
CrearCola)Jcola*0
clrscr)*0
K<ile)ocL.@*
F
rint9)MNtNtNtME'U ?RI'CI?ALNnNnNnM*0
rint9)MNt /. InsertarNnM*0
rint9)MNt -. EliminarNnM*0
rint9)MNt @. SalirNnM*0
scan9)MO"M3 Joc*0
sKitc<)oc*
F
case /+ rint9)MIngrese el numero a intro"ucir+NnM*0
scan9)MO"M3 Jx*0
insert)Jcola3 x*0
PP50
#reaQ0
case -+ rint9)MO" 9ue elimina"o "e la colaNnM3 remover)Jcola**0
2250
getc<)*0
#reaQ0
G
clrscr)*0
G
getc<)*0
return I0
G
E1"e:nicion "e las 9unciones1E
voi" CrearCola)Cola 1cola*
F
cola2D9rente.cola2D:nal.'ULL0
G
E19uncion que inserta el "ato en la arte :nal "e la cola1E
voi" insert )Cola 1cola3 int x*
F
'o"o 1nuevo0
nuevo.)'o"o1*malloc)si7eo9)'o"o**0
nuevo2Delemento.x0
nuevo2Dsiguiente.'ULL0
i9)emt=)1cola**
F
cola2D9rente.nuevo0
G
else
cola2D:nal2Dsiguiente.nuevo0
cola2D:nal.nuevo0
G
E1elimina el elemento que esta aL 9rente "e la cola1E
int remover )Cola 1cola*
F
int tem.'ULL0
i9)Lemt=)1cola**
F
'o"o 1nuevo0
nuevo.cola2D9rente0
tem.cola2D9rente2Delemento0
cola2D9rente.cola2D9rente2Dsiguiente0
9ree)nuevo*0
G
else
rint9)MERROR3 cola vacia3 se ue"e eliminarNaNnM*0
return )tem*0
G
int emt=)Cola cola*
F
return )cola.9rente..'ULL*0
G
Como ue"e notarse3 <emos imlementa"o3 "e una manera mu= sencilla3 los
algoritmos ara ingresar = eliminar "atos en una cola3 note que <emos "eclara"o "os
estructuras ara la cola3 es "ecir que3 una "e ellas contiene la arte entera "e los
"atos que vamos a guar"ar = el aunta"or <acia el siguiente no"o0 mientras que la
otra estructura3 cuenta con los aunta"ores "el 9rente = "el :nal.
Algo imortante que <a= que resaltar es el <ec<o que3 en la 7ona "e "eclaraci!n "e
varia#les3 "e#emos "eclarar la varia#le "e tio Cola que es el ar6metro que le
asaremos a las "i9erentes 9unciones0 muc<as veces se nos olvi"a <acer eso = or lo
cual3 intentamos3 erra"amente3 man"arle la "irecci!n "el tio "e "ato3 es "ecir0 que en
ve7 "e man"arle la "irecci!n "e la varia#le cola )Jcola*3 le man"amos la "irecci!n "el
TA8 Cola )JCola*3 lo cual no ser%a correcto.
A artir "e ello3 creamos la cola3 como lo exlicamos3 <acien"o que cola2D9rente.cola2
D:nal.'ULL0 con lo cual nos aseguramos que la cola est$ vac%a3 = lista ara agregar
valores. Las "em6s 9unciones3 s!lo son la imlementaci!n rigurosa "e los algoritmos
lantea"os con anteriori"a".
'o es imortante aren"erse al i$ "e la letra3 ca"a una "e las 9unciones3 =a sea ara
la ila o ara las colas3 si no que3 es imortante3 aren"erse lo que <ace ca"a 9unci!n3
tener resente el algoritmo e imlementarlo seg>n convenga al ro#lema que estamos
resolvien"o.
LISTAS
Es una colecci!n "e elementos "isuestos uno "etr6s "el otro3 en la que ca"a
elemento se conecta al siguiente or un MEnlaceM o M?unteroM.
Como se o#serva en la imagen3 los no"os "e las listas al igual que las colas = ilas3
est6 comuesta or una arte "e in9ormaci!n )que u"e ser "atos enteros3 Rotantes3
caracteres3 estructuras..* = el untero que mantiene el enlace entre un no"o = otro.
Existen varios tios "e Listas3 ero ara e9ectos "e comrensi!n = sinteti7aci!n3
<a#laremos "e cuatro tios esenciales "e listas+
Tios 8e Listas
1. Lista simlemente enla7a"a+ Ca"a no"o3 contiene un >nico aunta"or <acia
el siguiente no"o3 or lo cual <ace "e $l una estructura mu= e:ciente3 =a que el
>ltimo "e la lista aunta <acia null3 or ello3 es 96cil <acer recorri"os "irectos.
2. Listas 8o#lemente enla7a"a+ Esta lista se caracteri7a or que sus no"os
contienen "os unteros3 uno <acia el no"o siguiente = otro <acia el no"o anterior.
3. Listas Circulares+ Este tio "e lista3 es s!lo una extensi!n "e las lista
simlemente enla7a"a3 con la "i9erencia que el >ltimo elemento se enla7a al
rimer elemento "e la lista3 lo cual ermite el recorri"o en 9orma "e anillo
4. Lista Circular 8o#lemente enla7a"a+ Sui76 este tio "e lista3 sea la m6s
comle5a3 =a que es la com#inaci!n "e la lista circular = las "o#lemente
enla7a"as3 =a que es una lista "o#lemente enla7a"a "on"e el rimer elemento se
conecta con el >ltimo = viceversa.
?ILAS.
La ila es una estructura "e "atos que ermite almacenar "atos en el or"en LI&O )Last In
&irst Out* en esa4ol3 >ltimo en entrar3 rimero en salir*.
La recueraci!n "e los "atos es <ec<a en el or"en inverso "e su inserci!n.
?ara la imlementaci!n <e elegi"o una lista enla7a"a simle3 resenta"a so#re la
vertical.
Ba que la inserci!n es siemre <ec<a al inicio "e la lista3 el /er elemento "e la lista ser6 el
ultimo elemento ingresa"o3 or lo tanto estar6 en la ca#e7a "e la ila.
'o <e utili7a"o un untero :n3 como lo <ice en el caso "e la lista enla7a"a simle3 =a que
el o#5etivo no es el "e tratar una lista enla7a"a3 sino una ila.
Lo interesante es que el ultimo elemento ingresa"o3 ser6 el /er elemento recuera"o.
La construcci!n "el mo"elo "e un elemento "e la ila
?ara "e:nir un elemento "e la ila ser6 utili7a"o el tio struct.
El elemento "e la ila conten"r6 un camo "ato = un untero siguiente.
El untero siguiente "e#e ser "el mismo tio que el elemento3 "e lo contrario no o"r6
auntar <acia el elemento.
El untero siguiente ermitir6 el acceso al r!ximo elemento.
t=e"e9 struct ElementoLista F
c<ar 1"ato0
struct ElementoLista 1siguiente0
GElemento0
?ara ermitir las oeraciones so#re la ila3 vamos a guar"ar ciertos elementos+
el rimer elemento
el numero "e elementos
El /er elemento3 que se encuentra en la ca#e7a "e la ila3 nos ermitir6 reali7ar la
oeraci!n "e recueraci!n "e los "atos situa"os en la arte suerior "e la ila.
?ara ello3 ser6 utili7a"a otra estructura )no es o#ligatorio3 ue"en ser utili7a"as
varia#les*.
t=e"e9 struct ListaU#icaci!nF
Elemento 1inicio0
int tama4o0
G ?ila0
El untero inicio conten"r6 la "irecci!n "el /er elemento "e la lista.
La varia#le tama4o contiene el numero "e elementos.
'ota+
Esta ve7 no utili7amos un untero :n )ver la lista enla7a"a simle*3 no lo necesitamos
uesto que >nicamente tra#a5amos al inicio "e la lista.
Cualquiera que sea la osici!n en la lista3 el untero inicio aunta siemre <acia el /er
elemento3 que estar6 en la ca#e7a "e la ila.
El camo tama4o conten"r6 el n>mero "e elementos "e la ila3 cualquiera que sea la
oeraci!n e9ectua"a so#re la ila.
A. Iniciali7aci!n
Mo"elo "e la 9unci!n+
voi" iniciali7aci!n )?ila 1tas*0
Esta oeraci!n "e#e ser <ec<a antes "e cualquier otra oeraci!n so#re la ila.
Esta iniciali7a el untero inicio con el untero 'ULL3 = el tama4o con el valor I.
La 9unci!n
voi" iniciali7aci!n )?ila 1 tas*F
tas2Dinicio . 'ULL0
tas2Dtama4o . I0
G
Inserci!n "e un elemento en la ila
A continuaci!n el algoritmo "e inserci!n = registro "e los elementos+
"eclaraci!n "el elemento a insertar
asignaci!n "e la memoria ara el nuevo elemento
rellenar el conteni"o "el camo "e "atos
actuali7ar el untero inicio <acia el /er elemento )la ca#e7a "e la ila*
Actuali7ar el tama4o "e la ila.
Mo"elo "e la 9unci!n+
int ailar )?ila 1tas3 c<ar 1"ato*0
La rimera imagen muestra el inicio "e la inserci!n3 or lo tanto la lista "e tama4o /
"esu$s "e la inserci!n. La caracter%stica "e la ila no es mu= arecia"a con un solo
elemento3 =a que es el >nico a recuerar.
En cam#io la -"a imagen nos ermite o#servar el comortamiento "e la ila.
Lo que "e#emos retener es que la inserci!n siemre se <ace en la arte suerior "e la
ila )al inicio "e la lista*.
La 9unci!n
E1 ailar )a4a"ir* un elemento en la ila 1E
int ailar )?ila 1 tas3 c<ar 1"ato*F
Elemento 1nuevoTelemento0
i9 ))nuevoTelemento . )Elemento 1* malloc )si7eo9 )Elemento*** .. 'ULL*
return 2/0
i9 ))nuevoTelemento2D"ato . )c<ar 1* malloc )UI 1 si7eo9 )c<ar***
.. 'ULL*
return 2/0
strc= )nuevoTelemento2D"ato3 "ato*0
nuevoTelemento2Dsiguiente . tas2Dinicio0
tas2Dinicio . nuevoTelemento0
tas2Dtama4oPP0
G
C. Eliminar un elemento "e la ila
?ara eliminar un elemento "e la ila3 simlemente <a= que eliminar el elemento <acia el
cual aunta el untero inicio.
Esta oeraci!n no ermite recuerar el "ato en la ca#e7a "e la ila3 solo eliminarlo.
Mo"elo "e la 9unci!n+
int "esailar )?ila 1tas*0
La 9unci!n "evuelve 2/ en caso "e error3 si no "evuelve I.
Las etaas+
el untero suTelemento conten"r6 la "irecci!n "el /er elemento
el untero inicio auntar6 <acia el -"o elemento )"esu$s "e la eliminaci!n "el /er
elemento3 el -"o elemento estar6 en la ca#e7a "e la ila*
el tama4o "e la ila "isminuir6 un elemento.
La 9unci!n
int "esailar )?ila 1 tas*F
Elemento 1suTelemento0
i9 )tas2Dtama4o .. I*
return 2/0
suTelemento . tas2Dinicio0
tas2Dinicio . tas2Dinicio2Dsiguiente0
9ree )suTelemento2D"ato*0
9ree )suTelemento*0
tas2Dtama4o220
return I0
G

También podría gustarte