1. Código recursivo
package hanoi;
import java.io.*;
public class Hanoi
{static int moves=0; //cantidad de movimientos
static int getInt(){
String line;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try{
line = in.readLine();
int i = Integer.valueOf(line).intValue();
return i;}
catch (Exception e){
System.out.println("Digite un numero valido.n" +
"se asume como el valor de 1");
return 1;}}
/*Funcion para mover disco de torre a torre*/
static void hanoi(int altura, char deTorre, char aTorre, char conTorre)
{if (altura >= 1){
hanoi(altura-1, deTorre, conTorre, aTorre);
moverDisco(deTorre, aTorre);
hanoi(altura-1, conTorre, aTorre, deTorre);}}
/*funcion para imprimir el movimiento del disco*/
static void moverDisco(char deTorre, char aTorre)
{moves++;
System.out.print(deTorre);
System.out.print(aTorre);
System.out.print(((moves % 20)==0) ? 'n' : ' ');}
/*Funcion para Ingresar la cantidad de discos*/
public static void main(String[] args)
{
int AlturaTorre;
char deTorre='A', aTorre='B', conTorre='C';
System.out.println("Digite Cantidad de discos");
System.out.print("y presione Enter");
System.out.print (" ");
AlturaTorre = getInt();
hanoi(AlturaTorre, deTorre, aTorre, conTorre);
System.out.println();
}
}
2. Código iterativo
package iterativo;
import java.util.Scanner;
public class Iterativo {
static void ToresDeHanoiIterativo(int nroDiscos,char origen,char destino,char auxiliar)
{ char pilaO[] = new char[10];
char pilaD[] = new char[10];
char pilaX[] = new char[10];
int pilaN[] = new int[10];
int tope =0;
char varaux;
boolean band;
band=false;
while(nroDiscos>0 && band==false){
while(nroDiscos>1){
tope=tope+1;
pilaN[tope]=nroDiscos;
pilaO[tope]=origen;
pilaD[tope]=destino;
pilaX[tope]=auxiliar;
nroDiscos=nroDiscos-1;
varaux=destino;
destino=auxiliar;
auxiliar=varaux;}
System.out.println("Mover un disco de " + origen +" --> " + destino );
band=true;
if(tope>0){
nroDiscos=pilaN[tope];
origen=pilaO[tope];
destino=pilaD[tope];
auxiliar=pilaX[tope];
tope=tope-1;
System.out.println("Mover un disco de " + origen +" --> " + destino );
nroDiscos=nroDiscos-1;
varaux=origen;
origen=auxiliar;
auxiliar=varaux;
band=false;} }}
System.out.println("Ingrese el numero de discos:");
Scanner n = new Scanner(System.in);
int a = n.nextInt();
ToresDeHanoiIterativo(a,'O','D','A');
}}