<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Calcifer &#187; recursivity</title>
	<atom:link href="http://blog.calcifer.com.ar/tag/recursivity/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.calcifer.com.ar</link>
	<description></description>
	<lastBuildDate>Sat, 02 Oct 2010 05:32:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Renombrar recursivamente archivos y directorios</title>
		<link>http://blog.calcifer.com.ar/2008/06/renombrar-recursivamente-archivos-y-directorios/</link>
		<comments>http://blog.calcifer.com.ar/2008/06/renombrar-recursivamente-archivos-y-directorios/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 03:50:58 +0000</pubDate>
		<dc:creator>lvidarte</dc:creator>
				<category><![CDATA[None]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[recursivity]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://blog.calcifer.com.ar/2008/06/10/renombrar-recursivamente-archivos-y-directorios/</guid>
		<description><![CDATA[El siguiente script de bash renombra archivos y directorios convirtiendo sus nombres a minúsculas, reemplazando espacios, acentos, eñes y eliminando paréntesis.
Por defecto renombra únicamente aquellos archivos y directorios ubicados en el directorio pasado como parámetro. Es posible usar la opción-r&#124;--recursivepara que trabaje recursivamente en todos los directorios hijos:
./rename.sh -r dir
Usando la opción-v&#124;--verbosees posible ver en [...]]]></description>
			<content:encoded><![CDATA[<p>El siguiente script de bash renombra archivos y directorios convirtiendo sus nombres a minúsculas, reemplazando espacios, acentos, eñes y eliminando paréntesis.</p>
<p>Por defecto renombra únicamente aquellos archivos y directorios ubicados en el directorio pasado como parámetro. Es posible usar la opción<code>-r|--recursive</code>para que trabaje recursivamente en todos los directorios hijos:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">./rename.sh -r dir</div></div>
<p>Usando la opción<code>-v|--verbose</code>es posible ver en pantalla el listado de archivos modificados</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">./rename.sh -v -r dir</div></div>
<p>La opción<code>-t|--test</code>muestra un listado de cambios a realizar sin realizar ninguno</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">./rename.sh -t -r dir</div></div>
<h3>Ejemplo</h3>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px;height:300px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">xleo@calcifer:/tmp/music$ rename -t -r .<br />
/tmp/music/Jaime Roos/1998 - Concierto Aniversario<br />
./17 - Amándote.mp3 ./17_-_amandote.mp3<br />
./02 - Victoria Abaracón.mp3 ./02_-_victoria_abaracon.mp3<br />
./12 - Nadie Me Dijo Nada.mp3 ./12_-_nadie_me_dijo_nada.mp3<br />
./16 - Durazno Y Convención.mp3 ./16_-_durazno_y_convencion.mp3<br />
./01 - Si Me Voy Antes Que Vos-1.mp3 ./01_-_si_me_voy_antes_que_vos-1.mp3<br />
./03 - El Hombre De La Calle.mp3 ./03_-_el_hombre_de_la_calle.mp3<br />
./05 - Las Luces Del Estadio.mp3 ./05_-_las_luces_del_estadio.mp3<br />
./07 - Piropo.mp3 ./07_-_piropo.mp3<br />
./10 - Esta Noche.mp3 ./10_-_esta_noche.mp3<br />
./06 - Se Va La Murga.mp3 ./06_-_se_va_la_murga.mp3<br />
./08 - Los Futuros Murguistas.mp3 ./08_-_los_futuros_murguistas.mp3<br />
./15 - Tal Vez Cheché.mp3 ./15_-_tal_vez_cheche.mp3<br />
./13 - Bienvenido.mp3 ./13_-_bienvenido.mp3<br />
./1998 - Concierto Aniversario.m3u ./1998_-_concierto_aniversario.m3u<br />
./09 - Los Olímpicos.mp3 ./09_-_los_olimpicos.mp3<br />
./11 - Cometa De La Farola.mp3 ./11_-_cometa_de_la_farola.mp3<br />
./04 - Cuando Juega Uruguay.mp3 ./04_-_cuando_juega_uruguay.mp3<br />
./14 - El Tambor.mp3 ./14_-_el_tambor.mp3<br />
/tmp/music/Jaime Roos<br />
./1998 - Concierto Aniversario ./1998_-_concierto_aniversario<br />
/tmp/music<br />
./Jaime Roos ./jaime_roos</div></div>
<h3>rename.sh</h3>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:435px;height:500px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br /></div></td><td><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co0">#!/bin/bash</span><br />
<span class="co0">#</span><br />
<span class="co0"># @autor &nbsp; Leonardo Vidarte</span><br />
<span class="co0"># @version $Id rename.sh 5 2008-06-05 15:44:45Z xleo $</span><br />
<span class="co0">#</span><br />
<br />
<br />
<span class="co0"># ********</span><br />
<span class="co0"># INIT SET</span><br />
<span class="co0"># ********</span><br />
<span class="re2">verbose</span>=<span class="nu0">0</span><br />
<span class="re2">recursive</span>=<span class="nu0">0</span><br />
<span class="re2">MOVE</span>=<span class="sy0">/</span>bin<span class="sy0">/</span><span class="kw2">mv</span><br />
<span class="re2">ECHO</span>=<br />
<br />
<br />
<span class="co0"># ****</span><br />
<span class="co0"># HELP</span><br />
<span class="co0"># ****</span><br />
<span class="kw3">help</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw2">cat</span> <span class="co2">&lt;&lt; END<br />
Usage : rename [-t] [-v] [-r] directory<br />
<br />
Options:<br />
&nbsp; -v, --verbose &nbsp; &nbsp;verbose move<br />
&nbsp; -r, --recursive &nbsp;recursive rename<br />
&nbsp; -t, --test &nbsp; &nbsp; &nbsp; don't move, only show change list. Implies -v.<br />
&nbsp; -?, --help &nbsp; &nbsp; &nbsp; show this help<br />
<br />
END</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="co0"># ***************</span><br />
<span class="co0"># RENAME FUNCTION</span><br />
<span class="co0"># ***************</span><br />
rename <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">find</span> <span class="re5">-maxdepth</span> <span class="nu0">1</span> <span class="sy0">|</span> \<br />
&nbsp; &nbsp; <span class="kw2">awk</span> <span class="st_h">'{out=tolower($0); \<br />
&nbsp; &nbsp; gsub(&quot; ?\&amp; ?&quot;,&quot;_y_&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;\(|\)&quot;,&quot;-&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;[\340-\345]&quot;,&quot;a&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;\347&quot;,&quot;c&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;[\350-\353]&quot;,&quot;e&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;[\354-\357]&quot;,&quot;i&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;\361&quot;,&quot;n&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;[\362-\366]&quot;,&quot;o&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;[\371-\374]&quot;,&quot;u&quot;,out); \<br />
&nbsp; &nbsp; gsub(&quot;[^0-9a-z\./_-]&quot;,&quot;_&quot;,out); \<br />
&nbsp; &nbsp; if ($0!=out) {print &quot;\&quot;&quot;$0&quot;\&quot; &quot;out;}}'</span> <span class="sy0">|</span> \<br />
&nbsp; &nbsp; <span class="kw2">xargs</span> <span class="re5">-r</span> <span class="re5">-n</span> <span class="nu0">2</span> <span class="re1">$ECHO</span> <span class="re1">$MOVE</span><br />
<br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="co0"># *************</span><br />
<span class="co0"># MAIN FUNCTION</span><br />
<span class="co0"># *************</span><br />
main <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
<br />
&nbsp; &nbsp; <span class="co0"># ----------------</span><br />
&nbsp; &nbsp; <span class="co0"># Recursive rename</span><br />
&nbsp; &nbsp; <span class="co0"># ----------------</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re1">$recursive</span> <span class="re5">-eq</span> <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="kw2">dir</span> <span class="kw1">in</span> <span class="st0">&quot;$1&quot;</span><span class="sy0">/*</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-d</span> <span class="st0">&quot;<span class="es2">$dir</span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cd</span> <span class="st0">&quot;<span class="es2">$dir</span>&quot;</span> <span class="sy0">&amp;&amp;</span> search <span class="st0">&quot;<span class="es2">$dir</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">fi</span><br />
<br />
<br />
&nbsp; &nbsp; <span class="co0"># ----------------------------</span><br />
&nbsp; &nbsp; <span class="co0"># Rename files and directories</span><br />
&nbsp; &nbsp; <span class="co0"># ----------------------------</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re1">$verbose</span> <span class="re5">-eq</span> <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;$1&quot;</span><br />
&nbsp; &nbsp; <span class="kw1">fi</span><br />
<br />
&nbsp; &nbsp; <span class="kw3">cd</span> <span class="st0">&quot;$1&quot;</span> <span class="sy0">&amp;&amp;</span> rename<br />
<br />
<br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="co0"># ***************************</span><br />
<span class="co0"># SHOW HELP WITHOUT ARGUMENTS</span><br />
<span class="co0"># ***************************</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="re5">-eq</span> <span class="nu0">0</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp;<span class="kw3">help</span><br />
&nbsp; &nbsp;<span class="kw3">exit</span> <span class="nu0">1</span><br />
<span class="kw1">fi</span><br />
<br />
<br />
<span class="co0"># *********</span><br />
<span class="co0"># SHOW HELP</span><br />
<span class="co0"># *********</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span><span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> =~ <span class="st_h">'(-h|--help)'</span> <span class="br0">&#93;</span><span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp;<span class="kw3">help</span><br />
&nbsp; &nbsp;<span class="kw3">exit</span> <span class="nu0">0</span><br />
<span class="kw1">fi</span><br />
<br />
<br />
<span class="co0"># ***************</span><br />
<span class="co0"># CHECK ARGUMENTS</span><br />
<span class="co0"># ***************</span><br />
<span class="kw1">while</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="re5">-gt</span> <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">do</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;$1&quot;</span> <span class="kw1">in</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; -v<span class="sy0">|</span>--verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">verbose</span>=<span class="nu0">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">MOVE</span>=<span class="st0">&quot;<span class="es2">$MOVE</span> --verbose&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; -r<span class="sy0">|</span>--recursive<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">recursive</span>=<span class="nu0">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; -t<span class="sy0">|</span>--test<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">verbose</span>=<span class="nu0">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">MOVE</span>=<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">ECHO</span>=<span class="sy0">/</span>bin<span class="sy0">/</span><span class="kw3">echo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">*</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> invalid argument $<span class="nu0">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">help</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">esac</span><br />
<br />
&nbsp; &nbsp; <span class="kw3">shift</span><br />
<br />
<span class="kw1">done</span><br />
<br />
<br />
<span class="co0"># ****************************************</span><br />
<span class="co0"># CHECK DIRECTORY AND INVOKE MAIN FUNCTION</span><br />
<span class="co0"># ****************************************</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> == <span class="st_h">'.'</span> <span class="re5">-o</span> <span class="st0">&quot;$1&quot;</span> == <span class="st_h">'*'</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; <span class="re2"><span class="kw2">dir</span></span>=<span class="re1">$PWD</span><br />
<span class="kw1">else</span><br />
&nbsp; &nbsp; <span class="re2"><span class="kw2">dir</span></span>=$<span class="nu0">1</span><br />
<span class="kw1">fi</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-d</span> <span class="st0">&quot;<span class="es2">$dir</span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; <span class="kw3">cd</span> <span class="st0">&quot;<span class="es2">$dir</span>&quot;</span><br />
&nbsp; &nbsp; <span class="re2"><span class="kw2">dir</span></span>=<span class="re1">$PWD</span><br />
&nbsp; &nbsp; <span class="kw3">cd</span> - <span class="nu0">1</span><span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null<br />
&nbsp; &nbsp; main <span class="st0">&quot;<span class="es2">$dir</span>&quot;</span><br />
&nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">0</span><br />
<span class="kw1">else</span><br />
&nbsp; &nbsp; <span class="kw3">echo</span> rename: directory not found<br />
&nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">3</span><br />
<span class="kw1">fi</span></div></td></tr></tbody></table></div>
<h3>Otro ejemplo</h3>
<p>Salida de<code>./rename -r -v /shared/music > <a href='http://blog.calcifer.com.ar/uploads/2008/06/result.txt' title='result.txt'>result.txt</a></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.calcifer.com.ar/2008/06/renombrar-recursivamente-archivos-y-directorios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Torre de Hanoi</title>
		<link>http://blog.calcifer.com.ar/2006/09/torre-de-hanoi/</link>
		<comments>http://blog.calcifer.com.ar/2006/09/torre-de-hanoi/#comments</comments>
		<pubDate>Thu, 28 Sep 2006 19:34:05 +0000</pubDate>
		<dc:creator>lvidarte</dc:creator>
				<category><![CDATA[None]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[recursivity]]></category>

		<guid isPermaLink="false">http://blog.calcifer.com.ar/2006/09/28/torre-de-hanoi/</guid>
		<description><![CDATA[El problema de las Torres de Hanoi es curioso porque su solución es muy rápida de calcular, pero el número de pasos para resolverlo crece exponencialmente conforme aumenta el número de discos.
Resolución de la torre de cuatro discos(imagen tomada de Wikipedia)
Es un problema que se suele plantear a menudo en ámbitos de programación, especialmente para [...]]]></description>
			<content:encoded><![CDATA[<p>El problema de las <a href="http://es.wikipedia.org/wiki/Torres_de_Hanoi" title="Torres de Hanoi en Wikipedia" class="linkwikipedia">Torres de Hanoi</a> es curioso porque su solución es muy rápida de calcular, pero el número de pasos para resolverlo crece exponencialmente conforme aumenta el número de discos.</p>
<p class="center"><img src="/uploads/2006/09/tower_of_hanoi_4.gif" alt="" /><br />Resolución de la torre de cuatro discos<br />(imagen tomada de <a href="http://es.wikipedia.org/wiki/Imagen:Tower_of_Hanoi_4.gif" title="" class="linkwikipedia">Wikipedia</a>)</p>
<p>Es un problema que se suele plantear a menudo en ámbitos de programación, especialmente para explicar <a href="http://es.wikipedia.org/wiki/Recursividad" title="Recursivida en Wikipedia" class="linkwikipedia">recursividad</a> y el algoritmo para resolverlo es realmente corto:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">hanoi(n, Orig, Aux, Dst)<br />
&nbsp; &nbsp;si (n&gt;0) hacer<br />
&nbsp; &nbsp;hanoi(n-1, Orig, Dst, Aux)<br />
&nbsp; &nbsp;escribir(Mover Orig a Dst)<br />
&nbsp; &nbsp;hanoi(n-1, Aux, Orig, Dst)</div></div>
<p>A continuación se muestra una implementación Java del algoritmo. El programa se invoca de la siguiente manera:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">java Hanoi n</div></div>
<p>(donde n es el numero de discos)</p>
<div class="codecolorer-container java " style="overflow:auto;white-space:nowrap;width:435px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="java codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">public</span> <span class="kw1">class</span> Hanoi<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> <span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> numDiscs <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">parseInt</span><span class="br0">&#40;</span>args<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; move<span class="br0">&#40;</span>numDiscs, <span class="st0">&quot;A&quot;</span>, <span class="st0">&quot;B&quot;</span>, <span class="st0">&quot;C&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp;<span class="kw1">protected</span> <span class="kw1">static</span> <span class="kw4">void</span> move<span class="br0">&#40;</span><span class="kw4">int</span> n, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> orig, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> aux, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> dest<span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n<span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move<span class="br0">&#40;</span>n<span class="sy0">-</span><span class="nu0">1</span>, orig, dest, aux<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Mover disco de &quot;</span> <span class="sy0">+</span> orig <span class="sy0">+</span> <span class="st0">&quot; a &quot;</span> <span class="sy0">+</span> dest<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move<span class="br0">&#40;</span>n<span class="sy0">-</span><span class="nu0">1</span>, aux, orig, dest<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
<br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>Aquí pueden verse las sucesivas llamadas recursivas a la función<code>move()</code>para el caso de 3 discos:</p>
<p><span id="more-53"></span></p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px;height:300px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">move(3, A, B, C)<br />
&nbsp; &nbsp;3&gt;0<br />
&nbsp; &nbsp;move(2, A, C, B)<br />
&nbsp; &nbsp; &nbsp; 2&gt;0<br />
&nbsp; &nbsp; &nbsp; move(1, A, B, C)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, A, C, B)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stdout: mover A a C<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, B, C, A)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp; &nbsp; stdout: mover A a B<br />
&nbsp; &nbsp; &nbsp; move(1, C, A, B)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, C, B, A)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stdout: mover C a B<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, A, B, C)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp;stdout: mover A a C<br />
&nbsp; &nbsp;move(2, B, A, C)<br />
&nbsp; &nbsp; &nbsp; 2&gt;0<br />
&nbsp; &nbsp; &nbsp; move(1, B, C, A)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, B, A, C)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stdout: mover B a A<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, C, B, A)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp; &nbsp; stout: mover B a C<br />
&nbsp; &nbsp; &nbsp; move(1, A, B, C)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, A, C, B)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stdout: mover A a C<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;move(0, B, A, C)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&gt;0</div></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.calcifer.com.ar/2006/09/torre-de-hanoi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

