Está en la página 1de 47

Tema 2

Recurrencia

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Contenidos
Recurrencia Induccin

Matem tica !atural Induccin Completa Tipos Inducti"os

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin

Recursin #recursion$% Recursi"idad &iccionario castellano - recurrir


'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

-e in"ocan #llaman$ a s mismos &e)inidos en t/rminos de s mismos


Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin - Circularidad

0Circularidad1 Recurrencia in,til


Procedure P Begin P End P

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

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

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$

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C E2emplo #un poco$ m


PROCEDURE P; VAR x : CARDINAL; BEGIN ReadCard(x); Wri eLn; I! E"Pri#o(x) $%EN Wri e& ring('E" Pri#o') EL&E Wri e& ring('No e" Pri#o'); END; (i)* Wri eLn; P; END P;

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

Introduccin - Recurrencia In)inita


<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

Introduccin C Recursin "s5 Iteracin


!UNC$ION !ac (n : CARDINAL) : CARDINAL BEGIN I! (n . /) $%EN RE$URN 0 EL&E RE$URN ( n 1 !ac (n20)); END END !ac (

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

Introduccin C Recursin "s5 Iteracin

Comparar con "ersin iterati"a3


PROCEDURE !ac (n : CARDINAL) : CARDINAL VAR i3 ) : CARDINAL; BEGIN ) :. 0; !OR i :. 4 $O n DO ) :. ) 1 i; END; ()or* RE$URN ); END !ac ;

'ersin recurrente m s simple 4 an loga a una de)inicin matem tica

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Recursin "s5 Iteracin


<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

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Recursin "s5 Iteracin

'ersin iterati"a de una recursin


Procedi#ien o P (x)
&i x . / en I#5ri#ir &ino I#5ri#ir P (x20) I#5ri#ir once" x x (20) 1 x

0El llamado con P #3$% 9u/ salida produce1


Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Recursin "s5 Iteracin

0Cmo trans)ormar este cdigo a otro e9ui"alente% sin recursin1


Procedi#ien o P (x) &i Ca"oBa"e (x) en once" Acci6nBa"e (x) &ino Acci6nAn e" (x) P ( $ran")or#aci6n(x) ) Acci6nDe"5u7" (x) recursin de cola
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Recursin "s5 Iteracin


Procedimiento P (x) x := x; Mientras NO CasoBase (x) AccinAntes (x) x := Transformacin (x) FinMientras AccinBase (x)

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Recursin "s5 Iteracin

0Cmo trans)ormar este cdigo a otro e9ui"alente% sin recursin1


Procedi#ien o P (x) &i Ca"oBa"e (x) en once" Acci6nBa"e (x) &ino Acci6nAn e" (x) P ( $ran")or#aci6n(x) ) Acci6nDe"5u7" (x)
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Recursin "s5 Iteracin


Procedi#ien o P8 (x) x8 :. x; Pila s ac!a 9ien ra" NO Ca"oBa"e (x8) Acci6nAn e" (x8) A"lilar (x# s) x8 :. $ran")or#aci6n (x8) !in9ien ra" Acci6nBa"e (x8) Mientras NO Pila ac!a (s) Accin$es"%&s ( To"e (s) ) $esa"ilarTo"e (s) FinMientras Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Primeras Conclusiones

Usamos subprogramas recurrentes


Operando so.re nuevos datos Produciendo adems otros efectos

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

Introduccin C Primeras Conclusiones

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

&irectamente #n B 0$ Reduci/ndolo a Fact de un n,mero m s c+ico #m s cercano a 0$

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Introduccin C Primeras Conclusiones


! 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

Introduccin C Primeras Conclusiones


#olapamiento recurrencia$iteraci%n Redundancia


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

Esto es la .ase de los llamados L !"#$% & ' (L$R$)*+O&


Funcionales - son particularmente interesantes <gicos

<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

Introduccin C Primeras Conclusiones


<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

Tam.i/n se da lo in"erso #recordar e2emplos$

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes - !,meros !aturales

<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 $

En lgica% los naturales se de)inen e@plcitamente

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes - !,meros !aturales

<a idea es a.straerse de cual9uier sistema de numeracin posicional


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

Argenes - !,meros !aturales

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

Es con"eniente tener una representacin para el 0 #cero$


Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes - !,meros !aturales


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

03! H n3! H -n3!

0 4 & son llamados #operadores$ CA!-TRFCTARE- del con2unto !

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes C Induccin Matem tica !atural

<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

&onde P#n$ es una proposicin enunciado #matem tico$

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

Argenes C Induccin Matem tica !atural

Idea3 >Iuego de )ic+as de domin3 Para tirar todas3


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

Atra idea3 <a propiedada a pro.ar de.e ser3


Fna propiedad del padre #0$ -er +ereditaria

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes C &e)inicin de Funciones

<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

Argenes C &e)inicin de Funciones

E2emplo &ac : N -' N )ac(/) . 0('ca"o :a"e') )ac(& n) . (& n) )ac(n20)

)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

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes C &e)inicin de Funciones

E2emplos ) : N -' N # ; / . # # ; & n . & (# ; n) * : N -' N # 1 / . / # (& n) . (#1n) ; #


Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Argenes C &e)inicin de Funciones


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)

Atro e2emplo #m s comple2o$ Fi.3 ! -* ! #los n,meros de Fi.onacci$


!i:(/) . 0 !i:(0) . 0 !i:(n;4) . !i:(n;0) ; !i:(n)

&os llamadas en distintos puntos !o es un caso de recurrencia primiti"a


Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

Principio de Induccin Completa

-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

Principio de Induccin Completa

Caso general de de)inicin recurrente de )unciones ) 3 ! -* M

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

Principio de Induccin Completa

Para 9ue & est/ de)inida como )uncin de.e pro.arse% para todo n

4*&) !(*$ 5 #!*(*'$' de f6n7

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

Principio de Induccin Completa

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

Gase Reduccin a un predecesor #algunos predecesores$


Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Tipo Inducti"o

&e)inicin inducti"a del con2unto de las listas secuenciales )initas de naturales


Regla 13 lista "acia H H OP 3 !lista Regla 23 listas no "acas #cons$ H n 3 ! - 3 !lista n5- 3 !lista Regla 33 esas son todas las listas

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Tipo Inducti"o

E2emplos3

OP 15OP #O1P$ 2515OP #O2%1P$ notacin sint/tica3 @15@2555555@n5OP se representa3 O@1%@2%555%@nP

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Induccin Primiti"a Estructural

Principio de I!&FCCIQ! PRIMITI'? E-TRFCTFR?<


-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

<istas C Induccin Primiti"a Estructural


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$

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Recurrencia Primiti"a Estructural

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&))

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Recurrencia Primiti"a Estructural

&escomposicin de listas% m s generalmente3


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

&ada una lista con al menos dos elementos3 O@1% 555%@nP


Primero Medio Fltimo
Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Recurrencia Primiti"a Estructural

0Por

9u/ es Pal una )uncin1

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

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Recurrencia Primiti"a Estructural


<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

<istas C Recurrencia Primiti"a Estructural

<a )uncin Medio


9edio(=x3@>) . => 9edio(x?@?&) . @?9edio(@?&) (& no BacCa)

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

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

<istas C Recurrencia Primiti"a Estructural

'er 9ue la de)inicin es correcta3


- B O:1% 555 % :n% :nN1P Medio#45-$ B O:1% 555 % :nP Medio#@545-$ B Medio #O@%4%:1% 555 % :n%:nN1P$ B O4%:1% 555 % :nP B 45Medio#45-$ tal como est de)inido

Terico Programacin 2 - Edicin 2013 - Instituto de Computacin - Facultad de Ingeniera

También podría gustarte