Está en la página 1de 15

KarelyRecursin

I.EntendiendolaRecursin
Recursineslaformaenlacualseespecificaunprocesobasadoensupropiadefinicin.Siendoun pocomsprecisos,yparaevitarelaparentecrculosinfinenestadefinicin,lasinstanciascomplejas deunprocesosedefinenentrminosdeinstanciasmssimples,estandolasfinalesmssimples definidasdeformaexplcita. Wikipedia LarecursinesunaherramientamuypoderosaenelusodeKarel. LaformadeaplicarlarecursinenKarelesdefiniendounainstruccinentrminosdesmisma.Sian noquedadeltodoclaroesteconcepto,muyposiblementeesteejemploloaclarar: Cdigo1EjemplodeRecursin 1definenuevainstruccioncogezumbadorescomo 2inicio 3 sijuntoazumbadorentonces 4 inicio 5 cogezumbador; 6 cogezumbadores; 7 fin; 8fin; Noesmuydificilverqueloquehaceestainstruccinestomartodosloszumbadoresquehayenuna casilla.Enlalnea3compruebasihayzumbadores,siloshay,tomaunzumbador(lnea5)ylafuncin sellamaasimisma(lnea6). Volviendoaladefinicinformalderecursin,sedicequesedefinenlasinstanciascomplejasen trminosdeinstanciasmassimples,ylasmssimplesdetodas,definidasdeformaexplcita. Enelprogramaanteriorsepuedeversinmuchoproblemaquecadaquesellamaalainstruccincoge zumbadoreshayunzumbadormenosquelaultimavezquesellamalainstruccincoge zumbadores,esdecir,lainstanciacompleja(cogezumbadoresconxzumbadoresenlacasilla),seest definiendoentrminosdeunainstanciamassimple(cogezumbadoresconx1zumbadoresenla casilla).Yfinalmente,sihay0zumbadoresenlacasilla,norealizaraccinalguna,estoes,lainstancia massimple,definidaexplcitamente. Podraestarsepreguntado,Qusucedesialgunadeestascondicionesnosecumplenperola instruccionsiguedefiniendoseentrminosdesmisma?. Encasodequeesosuceda,larecursinpasaraaserunbucleinterminable. Cdigo2Bucleinfinito(falsaideaderecursin) 1definenuevainstruccionbuclecomo 2inicio 3 bucle; 4fin;

SifueraposibleseguirlasespecificacionesdellenguajedeKarelalpiedelaletra,unavezllamadala funcinbucleelprogramajamasterminara. Sinembargo,porcuestionesdememoriaelprogramaenlapracticasitermina,peronoconuna terminacinnormal,sinoconunerrorllamadodesbordamientodepila. Paraentenderaqueserefiereconsto,esnecesarioimaginarlamemoriadelacomputadoradonde Karelseestejecutando. Alllamaraunainstruccin,obviamenteKareldebederecordardesdequelneafuellamado. Heaquunejemplomuyfamiliar: Codigo3Ejemplodellamadaainstruccin 1iniciarprograma 2definenuevainstrucciongiraderechacomo 3inicio 4repetir3veces 5giraizquierda; 6fin; 7iniciaejecucion 8dejazumbador; 9giraderecha; 10dejazumbador; 11apagate; 12terminaejecucion 13finalizarprograma Aqu,Kareliniciaenlalnea7,dejaunzumbadoralllegaralalnea8,yalllegaralalnea9,semueve sbitamentealalnea4,repite3veceslalnea3.Yluegoqu?,saltaalalnea10,porqumotivo?, obviamenteporquelainstruccinfuellamadadesdelalnea9. ParaqueKarelsupieraaqulineadebadeirdespuesdeterminardeejecutargiraderechanecesit recordarla,yesoimplicairguardandoenalgnlugardelamemorialalneadesdelacualsellamala instruccinactual. Ahora,lapreguntaobligatoriaesquesloquesucedecuandosellamaaunainstruccindentrode otrainstruccin?,obviamentenosepuedeolvidardesdedndefuellamadalainstruccinactual,y tambienesnecesariorecordardesdedndeseestllamandoalanuevainstruccin,porlotantose tienenqueguardarlas2posicionesenmemoria,cadaquesellameaunainstruccindentrodeotra,una nuevaposicinenmemoriadebedeguardarlalneadesdelacualseestellamandoalainstruccin. Sinembargo,cuandounainstruccinterminasuejecucin,yanoesnecesarioseguirrecordando desdedondesellamalainstruccin. DeesaformasepuedesaberqueKarelguardaenmemoriaunaespeciedelistaindicandodesde dondefueronllamadascadaunadelasinstruccionesenelrespectivordenquefueronllamadas,cada queunainstruccinnuevacomienzasuejecucin,unnuevonmeroseagregaalfinaldelalista,y cadaqueunainstruccinterminasuejecucin,unnmerosequitadelfinaldelalista. Bueno,puesaestalistaseledenominapilaostack,lapilatieneuntamaomximo,ysielprograma sobrepasarestelmitedememoriadestinadoalapila,elprogramasbitamenteterminar. Estollevaalapregunta:CuleseltamaomximodepiladeKarel?esfijoovaradependiendode lacomputadoradondeseejecute?.

EltamaomximodelapiladeKarelesfijo,yesexactamentede5000llamadasainstruccin anidadas,sialguienloquierecomprobar,elsiguientecdigolesertil: Cdigo4SoportedeKarelantesdeldesbordamientodepila 1definenuevainstruccionbuclecomo 2inicio 3 dejazumabdor; 4 bucle; 5fin; Alejecutarloaseguresedetenersuficienteszumbadoresenlamochila,yvercomodespusdecolocar 5000zumbadoreselprogramaterminaconelerrordedesbordamientodepila.

II.UsandolaRecursinenKarelpararecuento
Sieresobservador,seguramentetehabrsdadocuentaquelarecursinquesemuestraenelcdigo1es innecesariaeinclusopuedecausarundesbordamientodepilasihaymasde5000zumbadoresenla casillaqueseestllamando. Bienpodrasersustituidoporesto: Cdigo5LomismoqueCdigo1peroeliminandolarecursin 1definenuevainstruccioncogezumbadorescomo 2inicio 3 mientrasjuntoazumbadorhacer 4 cogezumbador; 5fin; Sinembargo,hayocacionesenquelarecursinresultamuytil. LaprincipalutilidaddelarecursinenKarelesladerealizarunaoperacinluegodeefectuarla llamadarecursiva;unpatrngeneralseraestaforma: Pseudocdigo1 definenuevainstruccion(nombredelainstruccion)como inicio (bloquedeinstrucciones1) (llamadarecursiva) (bloquedeinstrucciones2) fin; Aquseentiendequeenllamadarecursivayaestdefinidaunacondicinqueindicacuandodejarde llamarselafuncinasmisma. Silafuncinsellamaasmismaxveces,elbloquedeinstrucciones1seejecutarxveces,yelbloque deinstrucciones2tambienseejecutarxvecesdespus. NtesequeestepatrnNOtienelosmismosresultadosqueesteotro:

Pseudocdigo2 definenuevainstruccion(nombredelainstruccion)como inicio (bloquedeinstrucciones1) (bloquedeinstrucciones2) (llamadarecursiva) fin; Enelpseudocdigo2,tantoelbloquedeinstrucciones1comoelbloquedeinstrucciones2seejecutan mientraslacondicinparaquelainstruccinsesigallamandoasmismaseaverdadera. Sinembargo,enelpseudocdigo1,elbloquedeinstrucciones1seejecutamientraslacondicinpara quelainstruccionsellameasimismaseaverdadera,sinembargo,elbloquedeinstrucciones2se ejecutaporprimeravezcuandodichacondicinesfalsa,ylassiguientesvecesseejecuta independientementedesilacondicinesverdaderaofalsa.Enestapropiedadradicaelpoderquetiene larecursinenKarel. ProblemadeEjemplo1 Datos OriginalmenteKarelseencuentraenlacasilla(1,1)orientadohaciaelnorte. Kareltendrinfinitoszumbadoresenlamochila. Enlaposicin1,1habr0<=x<=99zumbadores. NohabrmasmurosdelospredeterminadosenunmundonuevodeKarel. Problema Escribeunprogramaquecuandoterminesuejecucin,Karelseencuentreenlacasilla(1,x+1). Solucin Unamaneraiterativadehacerlopodrasertenerunacolumnadezumbadoresenlaavenida1,eir quintandounzumbadoresdelacasilla(1,1)eirlosponiendoenlapartesuperiordelacolumnadeuno porunodetalformaquealfinalhayaunacolumnadexzumbadoresyKarelsimplementesedeba colocarenlapartesuperiordelacolumna. Sinembargohayunasolucinmuchomassencilla. Karelpuedetomartodosloszumbadoresquehayaenlacasillayluegoporcadazumbadorquetom, avanzarunpasohaciadelante. Parahacerestoesnecesariousarrecursin. Elbloquedeinstrucciones1,enestecasoseracogezumbador,yelbloquedeinstrucciones2 seraavanza,Esdecir,primerotomartodosloszumbadoresyposteriormenteavanzartantasveces comozumbadorestomados. Elsiguientecdigoresuelveesteproblemaconlasolucinrecursivadescrita Cdigo6Solucinalproblemadeejemplo1 1iniciarprograma 2definenuevainstruccionfuncioncomo 3inicio 4sijuntoazumbadorentonces 5inicio 6cogezumbador;

7funcion; 8avanza; 9fin; 10fin; 11iniciaejecucion 12funcion; 13apagate; 14terminaejecucion 15finalizarprograma Sinotequedaclaroelfuncionamientodelcodigoanterior,esrecomendableimplementarloyobservar detenidamentecmoactua,pueseselproblemamasbsicoysencilloqueseabordaenestetutorial. ProblemadeEjemplo2 Datos OriginalmenteKarelseencuentraenlacasilla(1,1)orientadohaciaeleste. Hayunsolozumbadorenelmundo,enlacasilla(2x+1,1). NohabrmasmurosdelospredeterminadosenunmundonuevodeKarel. Problema Escribeunprogramaquecuandoterminesuejecucin,Karelseencuentreenlacasilla(x+1,1). Solucin AquporcadapardepasosqueKareldealfrente,deberdedarunpasohaciaatrs. Unaformadelograresto,seraasegurandosedequealdarunpasoatrs,Karelsiempreseencuentre orientadohaciaeloesteyaldar2pasosparaelfrente,Karelsiempreseencuentreorientadoaleste. Sinembargo,unaformamspracticadehacerlopuedeseravanzarenlnearecta,yluegodequela instruccionsellameasimismaporltimavez,darmediavueltaylospasosposterioressiempresern haciaeloeste. Elsiguientecdigoilustralasolucinrecursivaqueacabadeserdescrita: Cdigo7SolucinalproblemadeEjemplo2 1 iniciarprograma 2 definenuevainstruccionfuncioncomo 3 inicio 4 sinojuntoazumbadorentonces 5 inicio 6 avanza; 7 avanza; 8 funcion; 9 fin 10 sino 11 inicio 12 giraizquierda; 13 giraizquierda; 14 fin; 15 avanza;

16 17 18 19 20 21

fin; iniciaejecucion funcion; apagate; terminaejecucion finalizarprograma

ProblemadeEjemplo3 Datos InicialmenteKareltendr0zumbadoresenlamochilayseencontrarenlaposicin(x,y). Habrunsolozumbadorenelmundoyseencontrarenlaposicin(1,1) Losunicosmurosquehabrn,sernlosquedelimitanelperimetrodelmundo. Problema Kareldebercolocarelzumbadorenlaposicin(x,y)yposteriormenteterminarsuejecucin. Solucin Aqulounicoquehayquehaceresavanzarhaciaelsurhastaencontrarunapared,luegoaloestehasta encontrarunapared,tomarelzumbadoryporcadapasoquesediohaciaeloeste,darunpasohaciael este,porcadapasoquesedihaciaelsur,darunpasohaciaelnorte,deesamaneraKarelpodrirala posicin(1,1)yregresaralaposicininicial. Comoaquhaydostiposdemovimientos(nortesuryesteoeste)seraconvenienteimplementardos instrucciones,dondelaultimallamadarecursivadelaprimerainicieconlaejecucindelasegunda. Nuevamente,siquedalgunadudadelasolucin,elcodigotalvezpuedaaclararla: Cdigo7SolucinalProblemadeEjemplo3 1 iniciarprograma 2 definenuevainstruccionhorizontalcomo 3 inicio 4 mientrasnoorientadoaloestehacer 5 giraizquierda; 6 sifrentelibreentonces 7 inicio 8 avanza; 9 horizontal; 10 mientrasnoorientadoalestehacer 11 giraizquierda; 12 avanza; 13 fin 14 sino 15 inicio 16 cogezumbador; 17 fin; 18 fin; 19 definenuevainstruccionverticalcomo 20 inicio 21 mientrasnoorientadoalsurhacer

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

giraizquierda; sifrentelibreentonces inicio avanza; vertical; mientrasnoorientadoalnortehacer giraizquierda; avanza; fin sino inicio horizontal; fin; fin; iniciaejecucion vertical; dejazumbador; apagate; terminaejecucion finalizarprograma

ProblemadeEjemplo4 Datos Enlaposicin(1,1)habrxzumbadores,yenlaposicin(2,1)habryzumbadores. Nohabrmuroentredichasposiciones. InicialmenteKarelseencontrarenlaposicin(1,1)orientadoalesteynotendrzumbadoresenla mochila. Problema EscribeunprogramaquesitueaKarelenlaposicin(2,1)siy>x,deotraformasitueaKarelenla posicin(1,1).Adems,alterminarlaejecucin,deberhaberexactamentexzumbadoresenla posicin(1,1)eyzumbadoresenlaposicin(2,1). Solucin Esposibletomartodosloszumbadoresenlaposicin(1,1)yvolverlosaponerensulugar,luegopor cadazumbadorquesetomdelaposicin(1,1),tomarotrozumbadordelaposicin(2,1).Ysien algunmomentonoquedanzumbadoresenlaposicin(2,1),entoncessepuedeconcluirque(1,1) x>=y,deotraformax<y. Cdigo9Solucinalproblemadeejemplo4 1 iniciarprograma 2 definenuevainstruccioncomparacomo 3 inicio 4 sijuntoazumbadorentonces 5 inicio 6 cogezumbador;

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

compara; sijuntoazumbadorentonces cogezumbador; fin sino inicio mientrasalgunzumbadorenlamochilahacer dejazumbador; avanza; fin; fin; iniciaejecucion compara; sijuntoazumbadorentonces inicio mientrasalgunzumbadorenlamochilahacer dejazumbador; fin sino inicio mientrasalgunzumbadorenlamochilahacer dejazumbador; giraizquierda; giraizquierda; avanza; fin; apagate; terminaejecucion finalizarprograma

III.AprovechandolaInformacinenlaPiladeKarel
Comotehabrsdadocuenta,eltamaodelapilaenKarelcuandosedejadecumplirunacondicin puedesermuytilpararepetirunaoperacinvariasveces. Sinembargo,hastaahoranohemosaprovechandoelcontenidodelapila,esdecir,lapilacontienela informacinquedicedesdequelneafuellamadalaultimafuncin.Esainformacinpuedesermuy til!,yaqueesaeslaunicaformaquetieneKarelderecordarunacantidadvectorial(unacantidad vectorialesaquellaformadaporvariascantidadesescalares,enestecasolascantidadesescalaresseran laslneasdesdelascualesserealizaronlasllamadasafuncin). ProblemadeEjemplo5 Prob3delXconcursonacionaldelaOMI Historia Enojado por el saqueo de sus tesoros, Karel Sparrow, ha decidido crear un nuevo sistema de

codificacin parasus mapas. El nuevo sistema es unasecuencia de montones dezumbadores que indicanladireccinenlaquesedebedarcadapaso.Unzumbadorsignificaunpasoalnorte,dos zumbadoresunpasoaleste,tresunpasoalsurycuatrounoaloeste. Pasadoeltiempo,yaviejo,Sparrowharegresadoalaislaytehapedidoqueloayudesaseguirel recorridoindicadoporlasecuenciademontones.AyudaaKarelaencontrarsutesoroyganarsel10% desubotn. Problema Escribe un programa que permita a Karel seguir las instrucciones del mapa. Las instrucciones (secuencia de montones) se encuentran de manera consecutiva a lo largo de la primera fila, comenzandoenlacolumna1ysiguiendohacialaderecha. Elpuntodondeiniciaelrecorridosiempreeslaesquinadelafila1conlacolumna1. Lasinstruccionesdelrecorridosontalesquenuncatellevarndevueltaalaprimerafila,yelcamino jamssecruzarsobresimismo. Consideraciones

Kareliniciaenlaesquinadelaprimerafilaconlaprimeracolumnamirandoaleste. Lasinstruccionesterminancuandoencuentraselprimerespaciovacosobrelaprimerafilao llegasalapared,unmapapuedetenerhasta100instrucciones. Nollevasningnzumbadorenlamochila. Nohayparedesdentrodelmundonizumbadoresapartedelosdelasecuenciadeinstrucciones. NoimportalaorientacinfinaldeKarel. Kareldebeterminarenlaposicinfinaldelcaminoindicadoporelmapa. Noimportasidejaszumbadoresenalgnlugardelmapa.

Solucin Unasolucinquepuedellegarlealamenteaalguienestrazarelcaminoyregresarsiemprealafila1 paraverelsiguientepaso,otraposiblesolucinseraejectuarloscomandosdelmapa,deunoporuno yluegodeejecutaruncomando,volveralafila1,buscarelsiguienteyvolverrecursivamenteallugar endondeKarelsehabaquedadoenlabsquedadelmapautilizandolasolucinalproblema4. Sinembargo,existeunasolucinmuchomassencillaenlaquenosetienequeiryvolverdelafila1, yaqueKarelpuederecordarlasinstruccionesdelmapaguardandolasenlapila, Comoyahabamosvistoantes,alterminarlaejecucindeunafuncin,Karelsaltaralalneadonde sehizolaultimallamadaafuncin,alterminarlaejecucindeesafuncin,saltaralalineadondese hizolapenultimallamadaafuncin,etc. PoralgoalapilalellamanestucturadedatosLIFO(lastin,firstout),elultimoqueentraeselprimero quesale. ContodoestoloquesepretendedeciresquesiKarelvaaleerelmapaenlapila,hayquemeterel mapaalapilaalrevs,esdecir,semetealapilalaultimainstruccindelmapa,luegolapenultima, despueslaantepenultimayasisucesivamente... Ahoralapreguntaobligatoria:Cmometerlasinstruccionesalapila?. Noesmuydificil,loprimeroquesetienequehaceresobviamenteposicionarsealfinaldelas

instruccionesdelmapa. Luegodeeso,cadacasillapuedetenerde1a4zumbadores,esposiblehacerlallamadarecursivadesde unalneaAsiseencontrunsolozumbador,desdeotralneaBsiseencontraron2zumbadores,desde otralneaCsiseencontraron3,ydesdeotralneaDsiseencontraron4.YcuandoKarelregresede larecursividad,sisellamdesdeAavanzaralnorte,desdeBavanzaraleste,desdeCavanzaralsury desdeDavanzaraloeste.Siannotequedaclarocmoimplementaresto,puedeschecarelcdigo: Cdigo10SolucinalProblemadeEjemplo5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 iniciarprograma definenuevainstruccionsiguecomo inicio cogezumbador; sinojuntoazumbadorentonces(*Norte*) inicio sifrentelibreentonces inicio avanza; sigue; fin; mientrasnoorientadoalnortehacergiraizquierda; avanza; fin sino inicio cogezumbador; sinojuntoazumbadorentonces(*Este*) inicio sifrentelibreentonces inicio avanza; sigue; fin; mientrasnoorientadoalestehacergiraizquierda; avanza; fin sino inicio cogezumbador; sinojuntoazumbadorentonces(*Sur*) inicio sifrentelibreentonces inicio avanza; sigue; fin; mientrasnoorientadoalsurhacergiraizquierda;

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

avanza; fin sino inicio(*Oeste*) sifrentelibreentonces inicio avanza; sigue; fin; mientrasnoorientadoaloestehacergiraizquierda; avanza; fin; fin; fin; fin iniciaejecucion mientrasfrentelibreyjuntoazumbadorhacer avanza; giraizquierda; giraizquierda; sinojuntoazumbadorentonces avanza; sigue; apagate; terminaejecucion finalizarprograma

IV.B squedaenProfundidad
HastaahorasolamentehemosusadolarecursinenKareldemaneraqueKarelrealizaunasolallamada recursivaantesderegresar.Sinembargo,esposiblehacermasdeunallamadarecursivacadavez queseejecutaunafuncin. Labsquedaenprofundidadesunalgoritmodenaturalezarecursivabasadoenvisitartodoslosestados deunsistemalgico,porejemplo,hacerqueKarelrecorratodosloscuadrosalosquepuedellegaren unmundo. ProblemadeEjemplo6 Datos Karelseencuentraenunacasa. LacasaenelmundodeKarelesunreadelimitadaporparedes. Lacasapuedetenercualquierforma(inclusomurosinteriores),peroKarelpuedellegaracualquier partedelacasa. NohayzumbadoresenelmundodeKarel

Kareltieneinfinitoszumbadoresenlamochila Problema Karelquiereponerlealfombraalacasa,ayudaaKarelacolocarunzumbadorencadaespaciovaciode lacasa. Solucin Paratenerunaideadecmohacereso,vamosponiendonosenellugardeKarel,sinosencontramos paradosenunacuadriculasimilaraladelmundodeKarel,aqulugarespodemosir?.Larespuesta obviaes:norte,sur,esteyoeste;amenosquehayaunaparedquenosloimpida. Asiquelaunicamaneradeestarsegurosquerecorrimostodoes,primerocaminarhaciaelfrente, visitartodoloquepodamos,yvolveradondeempezamos. Luegocaminaralaizquierda,visitartodoloquesepuedavisitardesdeah,yalfinalvolveralinicio. Yhacerlomismoparaatrasyparaladerecha. Sinembargo,necesitamosalgoparamarcarpordondeyapasamos,laleyendadelminotaurocuentaque Teseoutilizunacuerdaparamarcarpordndeyahabapasadounavezqueseencontrabaperdidoen unlaberinto. Ahora,qupuedeutilizarKarel?zumbadores! Asquelaideaes,paracadalugarquevisiteKarel,regresesiyahayunzumbadorah,sinolohay entoncesdejeunzumbadoreintenteiracadaunadelas4direccionesyencadadireccinquepuedair llamaraestafuncionrecursivamente. Ynuevamentesemuestraaquelcdigodeunaposibleimplementacindelalgoritmomencionado: Cdigo11SolucinalProblemadeEjemplo6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 iniciarprograma definenuevainstruccionbuscacomo inicio sinojuntoazumbadorentonces inicio dejazumbador; repetir4veces inicio sifrentelibreentonces inicio avanza; busca; repetir2vecesgiraizquierda; avanza; repetir2vecesgiraizquierda; fin; giraizquierda; fin; fin; fin;

21 22 23 24 25

iniciaejecucion busca; apagate; terminaejecucion finalizarprograma

Estasolucinesunaimplementacindelabsquedaenprofundidad,sinembargo,losproblemasde Karelquerequierendebsquedaenprofundidadnosiempresepresentandelamismamanera,existen problemasdeKarelqueseresuelvenutilizandomodificacionesdeestasolucin,algunosejemplosde esosproblemassonencontraruncaminoparairdelafila1alafilansinpasarporcuadrosmarcadosy escribirunmapadelcaminoenlafila1,quitarloszumbadoresqueformanunafiguraenlaqueKarel seencuentrasinquitarloszumbadoresqueformanotrasfigurasalrededorencontrarenuncuarto dondeestaKarelunacasillarodeadapor3paredes. Sinembargo,seconsideraqueelejemploanteriordabasessuficientespararesolverlosotros problemasdebusquedaenprofundidad,porellonosetratarnaquperosiseinvitaallectoraque intenteresolverlos.

V.VariablesenKarelMitooRealidad?
Talveztesorprendaesto,peroKareltienesoporteparavariables;sinembargo,dichosoporteesta bastantelimitado;yaquesolosepuedeutilizarunavariableporfuncin,dichavariablesepasacomo parmetro. Aunquenoesposiblehacerasignacionesdirectamenteaunavariable,existen3funcionesdeKarelque operanconvariables:

precede(x)devuelvex1. sucede(x)devuelvex+1 siescero(x)devuelveverdaderosix=0yfalsoencasocontrario

AldeclararunafuncinenKarelesbastantefacilpermitirlequeuseunavariablecomoparametro: definenuevainstruccionfuncion(nombredelavariable)como Parallamaraunafuncinconunparmetrodeclarado,sepuedehacerdelasiguientemanera: funcion(valordelparametro); Ahoraesposibleutilizarlavariableenlaexpresinrepetirdelasiguientemanera: repetirnombredelavariableveces Enlaexpresinsidelasiguientemanera: sisiescero(nombredelavariable)entonces obien sino(siescero(nombredelavariable))entonces Estosusos,aunquepuedenahorrarcdigo,noayudandemanerasignificativapararesolverproblemas. LaprincipalutilidaddelasvariablesenKarel,eslacapacidadquetienenparaincrementarseo

decrementarsealpasarlascomoparmetrosenunarecursin.Paraentendermejoresto,esconveniente verunejemploprctico. ProblemadeEjemplo7 Datos Karelseencuentraenlacasilla(1,1)orientadoalnorte. Enlacasilla(1,1)hayazumbadores. Enlacasilla(1,2)haybzumbadores. Kareltieneinfinitoszumbadoresenlamochila. Nohaymurosenelinteriordelmundo. Problema Kareldebecolocarabzumbadoresenlacasilla(1,3). Existenvariasmanerasdehaceresto,perolaquequizsealamassencillaestomarrecursivamentelos azumbadoresmientrasseincrementalavariablequesepasacomoparmetro,luegotomarlosb zumbadoresrecursivamentepasandoacomoparmetroperosinincrementarlo,ycuandoregresede larecursinutilizadaparatomarbzumbadores,colocarenlacasilla(1,3)azumbadoresporcada llamadarecursivahechaparatomarlosbzumbadores,esdecir,colocarazumbadoresbveces,oseaab zumbadores. Codigo12SolucinalProblemadeEjemplo7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 iniciarprograma definenuevainstruccionagarrab(a)como inicio sijuntoazumbadorentonces inicio cogezumbador; agarrab(a); repetiraveces dejazumbador; fin sino inicio avanza; fin; fin definenuevainstruccionagarraa(a)como inicio sijuntoazumbadorentonces inicio cogezumbador; agarraa(sucede(a)); fin sino inicio

25 26 27 28 29 30 31 32 33

avanza; agarrab(a); fin; fin iniciaejecucion agarraa(0); apagate; terminaejecucion finalizarprograma

Comosepuedever,lasvariablesenKarelsonunabuenaalternativacuandoserequierellevar2conteos simulteaneamente.Otrasaplicacionesesllevarunconteoyhacerunabsquedaenprofundidadalavez, ollevarunconteomientrassehacenllamadasrecursivasquenonecesariamentetienenqueverconel conteo.

VI.Agradecimientosyotrascosas...
Aunqueyoescribestetutorial,nohabrasidoposiblesinoexistieralaversindeKarelprogramada porCesarCepeda,lacual,adiferenciadelastradicionales,soportarecursividad. Losproblemasdeejemplo5y6fueronideadosporMarteAlejandroRamrezOrtegn(Mars). Yparaellector: Siyalograstedominartodoloquesemencionaenestetutorial,yadeberassercapazderesolver cualquierproblemadeKarelqueaparezcaanivelestatalonacional.Noquierodecirconestoquela recursividadeslarespuestaparatodo,sinoqueparalogrardominarlosalgoritmosrecursivos,ya anteriormentesedebidehaberdominadolosalgoritmositerativos. Sinembargo,hayquebuscarlasencillez,lacualnosiempreesfcildeencontrar(anaestasalturas), unalgoritmodesencillaimplementacintienemuchaventajaenKarel,yaqueesmenospropensoa errores. Tambienhayquetenermuyclaroenqumomentoelalgoritmoqueseestadesarrollandoenlamente yaestlistoparaserimplementado,yenqumomentohayqueaclarardetallesquepuedencausar grandesprdidasdetiempodespussinoseaclaranantesdeimplementarlo. Tampocohayqueolvidarserparanoicoencuantoalarevisndelprograma. EnlaOlimpiadadeInformticanosolosenecesitapoderresolverlosproblemas,sinoquetambien importaeltiempoqueserequierepararesolverlos,elcuidadodedetallesquesonfcilesdepasarpor altoysobretodoleerbienlosproblemasparaentenderloscorrectamente;porelloserecomienda altamentequeellectorsigaresolviendoproblemasdeKarelenlapreparacinparaunacompetencia estatalonacional,cuantosms,mejor. TutorialescritoporLuisEnriqueVargasAzcona(Lobishomen)

También podría gustarte