Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recurrencia
Contenidos
Recurrencia Induccin
Introduccin
'ol"er una cosa al sitio de donde sali( retornar% repetirse% reaparecer( #poco )recuente$ Recurrir a algo -* +acer uso de ello #m s com,n$
-u.programas recurrentes
Introduccin - Circularidad
Termina con un error de e2ecucin3 no +a4 m s memoria #p5e236stac7 o"er)lo86$ 0Por 9u/1
Cada "e: 9ue un su.programa ; llama otro R de.e guardarse una indicacin del punto en ; donde el control de.e retornar al )inali:ar la e2ecucin de R <as llamdas a procedimientos pueden encadenarse ar.itrariamente ;1 -* ;2 -* ;3 -* 555 -* ;n -* 555
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Introduccin - Pila
=a4 una estructura de datos donde se almacenan sucesi"os puntos de retorno En general se tiene3 P -* ;1 -* ;2 -* ;3 -* 555 -* ;n donde ;n es el 9ue se est e2ecutando Paralelamente% se +a )ormado la estructura de >puntos de retorno> 3 p0% p1% p2% 555% pn-1
p0 -* punto de retorno en P p1 -* punto de retorno en ;1 555 pn-1 -* punto de retorno en ;n-1
<a estructura crece con cada nue"a llamada #un lugar$ 4 decrece al terminar la e2ecucin de un su.programa <a estructura se comporta como una PI<? #an logo a una pila de platos$
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Introduccin - Pila
pn-1 pn-2 ... p1 p0
El tope de la pila es el punto donde de.e retornarse el control tras la terminacin del su.programa corriente Por lo tanto% si el su.programa corriente llama a otro% el correspondiente punto de retorno de.e colocarse como nue"o tope de la pila ?l )inali:ar un su.programa% se usa el tope como direccin de retorno 4 se lo remue"e de la pila
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Introduccin - Pila
PI<? -* Estructura lineal din mica donde se agregan 4 9uitan elementos slo en uno de sus e@tremos CA<? -* Estructura lineal din mica donde se agregan elementos en uno se sus e@tremos 4 se 9uitan del otro
Introduccin - Pila
'ol"iendo al e2emplo de >recurrencia in,til> <a pila se +ace crecer in)initamente Pero #la memoria de$ la m 9uina es )inita% por lo tanto% en alg,n momento no +a4 m s memoria #stac7 o"er)lo8 B des.ordamiento de la pila$
s ,til
En principio% permitira implementar un programa interacti"o C Ca2ero ?utom tico Pero tam.i/n termina por des.ordar la pila #stac7$
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
<os anteriores son e2emplos de recurrencia in)inita Pueden tener sentido en principio #como en el segundo e2emplo$ pero terminan por des.ordar la memoria #al menos con las implementaciones comunes de las llamadas a su.programas$ Comparar los e2emplos con3
PROCEDURE P BEGIN W%ILE rue DO END (+,i-e* END P;
Estas "ersiones #iterati"as$ originan e2ecuciones in)initas pero no por ello des.ordan la memoria
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Cada e2ecucin de Fact(m) para m : CARDINAL es )inita En este e2emplo% para "alores no demasiado grandes de n% Fact#n$ puede ser demasiado grande #>C?R&I!?< A'ERF<AD>$ E@istir un rango de "alores de tipo C?R&I!?< para los cuales la )uncin anterior computa e)ecti"amente los correspondientes )actoriales
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
<a "ersin iterati"a es m s e)iciente #no usa pila$ -e acomoda me2or al es9uema de m 9uinas de estados Podra ocurrir 9ue la "ersin recurrente terminara por des.ordar la pila en casos en 9ue la "ersin iterati"a terminara normalmente
Esto le da sentido a la circularidad Por e2emplo% podemos decir 9ue la )uncin Fact est de)inida en t/rminos de s misma Esto sugiere una circularidad de la de)inicin pero en realidad es una a)irmacin no demasiado precisa
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
En realidad% para cada n% Fact(n) no est de)inido circularmente #e5e5 en t/rminos de s mismo$ sino en t/rminos de Fact(n- ) o .ien #si n B 0$ directamente #e5e sin usar Fact$ El cmputo de Fact(n) se reali:a3
! Esto garanti:a 9ue toda e2ecucin de Fact(n) es )inita Por lo tanto Fact(n) esta .ien de)inida para todo n #a menos del pro.lema de >C?R&I!?< A'ERF<AD> o e"entualmente >-T?CE A'ERF<AD>% en otros casos$ El uso de recurrencia permite escribir programas cu!as computaciones son de largo "ariable
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Tericamente% alcan:a con una de las dos5 &e +ec+o% pueden considerarse lengua2es
-in iteracin -in asignacin #"er F?CT recurrente% alcan:a con el concepto de )uncin 9ue retorna un "alor$ -in "aria.les de estado
<os lengua2es con "aria.les de estado% asignacin e iteracin son llamados lengua2es *,P R$)*+O&
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
<a ma4ora de los lengua2es imperati"os modernos admite recurrencia El uso de recurrencia permite desarrollar soluciones simples 4 elegantes
En muc+os casos en 9ue las correspondientes soluciones iterati"as son demasiado comple2as
<gica3 Teora de los !,meros !aturales 4 de las )unciones computa.les mec nicamente En Matem tica% los n,meros naturales
Fsualmente se asumen como .ien conocidos -e escri.en en notacin decimal #Tam.i/n en MA&F<?-2% P?-C?<% 555 $
Fn sistema de numeracin es de +ec+o un sistema de representacin de n,meros El sistema en .ase . usa . sm.olos E23 dgitos dn dn-1 .... do el n,mero representado es dn - ./n 0 ..... 0 do - ./0 #un polinomio$
Tratamos de a.straernos de todas estas representaciones Guscamos una >m s general> 9ue podamos tomar como la de)inicin #lo esencial$ del concepto de n,mero natural
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Esto nos lle"a a considerar el sistema de numeracin m s simple posi.le% el &*&) ,$ #!$R*O -istema unario de numeracin3
=a4 un slo dgito 3 1 Representamos los n,meros como secuencias de ese dgito3
e2emplos3 11 11111
Esto nos lle"a a la de)inicin de los n,meros naturales &e)inicin Inducti"a de un con2unto
&amos reglas para construir todos los elementos del con2unto3 Regla 1 - 0 es un natural Regla 2 - -i n es un natural entonces - n es otro natural Regla 3 - Esos son todos los naturales Atra notacin3 Regla 1 H Regla 2 H
<a Regla 3 o C<?F-FR? permite 2usti)icar el PR*!(*P*O de ' ,O&)R$(*2! por *!'#((*2! ,$) ,3)*($ !$)#R$L de P una propiedad de n,meros naturales
E2emplo de P
n es par n*2 -i n es primo entonces no es par
Entonces el siguiente es un principio #es9uema$ de demostraciones de enunciados de la )orma3 P#n$ "ale para todo n
-i P#0$ "ale #>caso .ase>$ 4 ?sumiendo 9ue P#n$ "ale podemos demostrar 9ue P#- n$ "ale #>paso inducti"o>$ Entonces P#n$ "ale para todo natural n
!o un m/todo para pro.ar >P#n$ "ale para todo n> cual9uiera sea P% depende de P
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Tirar la primera <a distancia entre dos sucesi"as de.e ser tal 9ue asegure 9ue si cae la pre"ia% entonces ella tira a la siguiente5
<a misma idea sir"e para de)inir )unciones so.re los naturales & : N -' ( )(/) . xo (no de5ende de )) ('ca"o :a"e') )(& n) . c( n3 )(n) ) (donde c no de5ende de ))
-i la )uncin est de)inida en 0 4 es +ereditaria #podemos de)inirla en - n usando 9ue est de)inida en n% e5e5 usando )#n$$ entonces 9ueda de)inida para todo n R (#RR !(*$ PR*,*)*+$
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
)ac 3 B 3 J )ac 2 B 3 J 2 J )ac 1 B 3 J 2 J 1 J )ac 0 B 3J2J1J1BK M/todo mec nico de c lculo #simple sustitucin$ Atro modelo de cmputo #programa$ mec nico
En MA&F<?-2 usamos notacin decimal en lugar de unaria <as ecuaciones de la de)inicin de )actorial3
I! ( n . / ) $%EN RE$URN 0 EL&E RE$URN n 1 !ac (n20)
-i podemos pro.ar P#n$ asumiendo P#:$ para todo : L n% entonces "ale P#n$ para todo n En t/rminos de las )ic+as de domino3
-i una cual9uiera se cae toda "e: 9ue todas sus predecesoras se caen entonces todas se caen
!otar 9ue toda aplicacin de este principio re9uiere pro.ar la propiedad para 0 0Por 9u/1
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Casos Gase #no aparece ) en las .i$ )#n0$ B .0 555 )#n7$ B .7 Casos Recurrentes #ei pueden depender de )$ )#n7N1$ B e1 555 )#n7Nr$ B er
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Para 9ue & est/ de)inida como )uncin de.e pro.arse% para todo n
para cada n de.e +a.er una ecuacin #caso$ 9ue se apli9ue #e@+austi"idad$ <as llamadas recurrentes de.en ser de la )orma
)#n$ B c#)#m1$% 555555 % )#mp$$ #donde c no depende de ) 4 est .ien de)inida$ donde mi 8 n para cada mi
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Esto da un criterio su)iciente para garanti:ar la .uena de)inicin de ) si se da la unicidad #por e2emplo con la e@clusin mutua$ -e 2usti)ica por *!'#((*O! (O,PL )$ #notar 9ue L es >.ien )undado>$ Metodolgicamente pensar los casos de n3
E2emplos3
-i P#OP$ 4 Para todos n 4 - podemos pro.ar P#n5-$ asumiendo P#-$ Entonces P#-$ "ale para toda - 3 !<ista
Tenemos tam.i/n el es9uema de de)inicin de )unciones so.re !<istas por RECFRRE!CI? PRIMITI'? E-TRFCTFR?<3 ) 3 !<ista -* @ )#OP$ B @0 )#@5-$ B c#@% -% )#-$$
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
Tam.i/n las listas se pueden poner en +ilera% tal como las )ic+as de domin Todo lo anterior se generali:a tri"ialmente a listas de elementos de cual9uier tipo ?<istas donde ? es cual9uier tipo #el tipo de los elementos de la lista$ !!! !otar 9ue !<ista es un con2unto in)inito #comparar con tipos de "ectores% 9ue son con2untos de secuencias de un largo dado$
E2emplos de )unciones so.re listas de)inidas por recurrencia primiti"a -argo: ALi" a 2< N -argo(=>) . / -argo(x?&) . 0 ; -argo(&) "noc: A x A-i" a 2< A-i" a "noc(x3=>) . =x> "noc(x3@?&) . @?("noc(x3&))
Pro.lema3 Escri.ir una )uncin Pal 3 !<ista -* Gool tal 9ue Pal#-$ B true sii - es palndroma #capic,a$ Fna solucin Pa-(=>) . rue Pa-(=x>) . rue Pa-(&) . (Pri#ero(&) . U- i#o(&)) A (Pa-(9edio(&)) (5ara & con a- #eno" 4 e-e#en o") donde las )unciones Primero% Fltimo 4 Medio se de)inir n separadamente
0Por
R En la llamada recurrente% el argumento es m s c+ico 9ue en la llamada original En particular% se da 9ue para toda lista - de al menos dos elementos% largo#-$ * largo#Medio#-$$ El es9uema general de de)inicin de )unciones recurrentes so.re listas es igual al "isto para naturales
<a )uncin Medio no puede de)inirse para toda lista Medio 3 S- 3 ?<ista T - tiene al menos dos elementosU -* ?<ista Podemos decir3 Medio 3 ?<ista -* ?<ista con la precondicin3 el argumento de.e tener al menos dos elementos E2emplos similares puenden darse con naturales
mcd 3 ! @ ! -* ! #m @imo com,n di"isor$ Precondicin3 los argumentos no pueden ser am.os nulos
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera
El espacio #dominio$ son las listas de al menos dos elementos -e cumplen e@a+usti"idad 4 e@clusin En el caso de recurrencia% la llamada recurrente respeta la precondicin de la )uncin 9undamental!!!3 si se usa una )uncin sin respetar la precondicin% no se puede tener ninguna garanta acerca del resultado