Un problema muy típico de lenguaje de programación es la muy conocida estructura de torres de hanoi. Es algo básico que tiene cualquier programador.
El programa trata de despertar la recursividad (recurrencia) que está en el programador para mostrarle la solución sencilla a un problema aparentemente complejo:
En suma, se tienen 3 torres con 3 anillos de diferente tamaño colocados en orden:
La idea es llevar los 3 anillos de la primera a la última torre con dos reglas muy sencillas:
- No se puede llevar varios anillos a la vez, tiene que ser de uno en uno
- El anillo que coloques en una torre debe estar obligatoriamente sobre otro más grande
El problema típico es hacer un programa que, como input=3 obtengas:
De 1 a 3
De 1 a 2
De 3 a 2
De 1 a 3
De 2 a 1
De 2 a 3
De 1 a 3
Lo partimos así porque el primer bloque es en realidad hanoi con 2 anillos llevando de torre 1 a torre 2, vamos a ponerlo: hanoi(2, t1, t2)
El tercer bloque es en realidad hanoi con 2 anillos llevando de torre 2 a torre 3: hanoi(2, t2, t3)
La solución general es entonces para n anillos de torre 1 a torre 3:
hanoi(n-1, t1, t2)
hanoi(1, t1, t3)
hanoi(n-1, t2, t3)
Aquí tienen una solución con Java, Swing y con log4j (para que vayamos creando la costumbre de hacerlo con esto). La estructura es lo más importante.
Espero lo disfrutes!!
El programa trata de despertar la recursividad (recurrencia) que está en el programador para mostrarle la solución sencilla a un problema aparentemente complejo:
En suma, se tienen 3 torres con 3 anillos de diferente tamaño colocados en orden:
La idea es llevar los 3 anillos de la primera a la última torre con dos reglas muy sencillas:
- No se puede llevar varios anillos a la vez, tiene que ser de uno en uno
- El anillo que coloques en una torre debe estar obligatoriamente sobre otro más grande
El problema típico es hacer un programa que, como input=3 obtengas:
De 1 a 3
De 1 a 2
De 3 a 2
De 1 a 3
De 2 a 1
De 2 a 3
De 1 a 3
Lo partimos así porque el primer bloque es en realidad hanoi con 2 anillos llevando de torre 1 a torre 2, vamos a ponerlo: hanoi(2, t1, t2)
El tercer bloque es en realidad hanoi con 2 anillos llevando de torre 2 a torre 3: hanoi(2, t2, t3)
La solución general es entonces para n anillos de torre 1 a torre 3:
hanoi(n-1, t1, t2)
hanoi(1, t1, t3)
hanoi(n-1, t2, t3)
Aquí tienen una solución con Java, Swing y con log4j (para que vayamos creando la costumbre de hacerlo con esto). La estructura es lo más importante.
Espero lo disfrutes!!
Comentarios