El aspecto más dificil del problema era visualizar la solución recursiva. De ahí en adelante no hay mayor decisión de diseño. Ya que no se pretende hacer una simulación del problema sino enviar los mensajes que ofrecen una solución. Esto se llevará a cabo desde un método recursivo.
El problema es simple si se visualiza como el de crear una clase llamada Hanoi que tenga un método recursivo que se encargue de enviar los mensajes necesarios para indicar paso a paso como mover los discos.
El programa a diseñar es sencillo: recibe como entrada un número entero, y muestra en pantalla cada paso a realizar. Se puede realizar la operación completa de resolver el juego con un solo método, llamémoslo ResolverHanoi, el cual (por supuesto) forma parte de una clase, llamémosla Hanoi. Por lo obtenido en la etapa de análisis, el método debería recibir el número de discos a mover, la torre de fuente y la torre de destino. Se debería comportar de la siguiente manera:
ResolverHanoi(n, ORIGEN, INTERMEDIA, DESTINO) // PASAR N DISCOS DE LA TORRE ORIGEN HASTA EL DESTINO (USANDO LA INTERMEDIA) { SI (n = 1) { MOSTRAR "Moviendo disco 1 de ORIGEN a DESTINO." } SINO { ResolverHanoi(n-1, ORIGEN, DESTINO, INTERMEDIA) // PASAR N-1 DISCOS DESDE EL ORIGEN A LA INTERMEDIA MOSTRAR "Moviendo disco " + n + " de ORIGEN a DESTINO." ResolverHanoi(n-1, INTERMEDIA, ORIGEN, DESTINO) // PASAR LOS N-1 DISCOS QUE ESTÁN EN LA TORRE INTERMEDIA A LA DESTINO } }
El programa simplemente debería llamar este método con la entrada del usuario para resolver el problema planteado