Por n-ésima petición de los lectores volveré a explicar el método 345-435 (léase “tres cuatro cinco” – “cuatro tres cinco”) para un algoritmo no recursivo de resolución del problema de las torres de Hanoi.

He aquí el algoritmo (en una especie de javascript), las bases se llaman 1, 2 y 3:

// ResolverHanoiNoRecursivo: la función principal
// N es el número de piezas
function ResolverHanoiNoRecursivo(N)
{
 //Los movimientos
 var arrMovimientos;
 //345 si es par
 //434 si es impar

 if(N%2==0)
 {
  arrMovimientos = {3, 4, 5}; //345
 }
 else
 {
  arrMovimientos = {4, 3, 5}; //435
 }
 var secuencia = 0; //será 0, 1 y 2 , y vuelve a empezar 0, 1, 2
 
 //Iteramos mientras no quede resuelto (las dos primeras bases están vacías)
 while(!(Base(1) == 0 && Base(2) == 0))
 {
  MoverPiezas(arrMovimientos[mover]);
  Mover++; //Seguimos con el siguiente movimiento
  if(secuencia==3) //si es tres volvemos a empezar con el cero
    secuencia=0;
 }
}

function Base(NBase)
{
 //dice el tamaño de la pieza superior de la base NBase
 //si no hay pieza devuelve 0
 …
}

//El meollo
funcion MoverPiezas(M)
{
 var baseA, vaseB; //moveremos de la base A a la base B
 if(M==3) //(1+2)
 {
  baseA = 1;
  baseB = 2;
 }
 if(M==4) //(1+3)
 {
  baseA = 1;
  baseB = 3;
 }
 if(M==5) //(2+3)
 {
  baseA = 2;
  baseB = 3;
 }
 //La regla del juego:
 //Si la base B es mayor que la A, el movimiento es de A a B
 //Si la base A es mayor que la B, el movimiento es de B a A
 if(Base(baseB) > Base(baseA))
 {
  HacerMovimiento(baseA, baseB);
 }
 if(Base(baseA) > Base(baseB))
 {
  HacerMovimiento(baseB, baseA);
 }
}