package ricorsione;
/*****************************************************
//  TorreHanoi.java 
//  Soluzione del problema detto 'la torre di Hanoi'.
//****************************************************/

public class TorreHanoi {
   private int dischiTotale;

   /*-----------------------------------------------------------------
   // Inizializza il problema con il numero di dischi specificato.
   //----------------------------------------------------------------*/
   public TorreHanoi (int dischi){
      dischiTotale = dischi;
   }

   /*-----------------------------------------------------------------
   // Effettua la chiamata iniziale a muoviTorre.
   //----------------------------------------------------------------*/
   public void risolvi(){
      muoviTorre(dischiTotale, 1, 3, 2);
   }
   
   /*-----------------------------------------------------------------
   //  Muove lo specificato numero di dischi da una torre all'altra
   //  rimuovendo la sottotorre di n-1 dischi, e spostando un disco
   //  per poi ricollocare la sottotorre. 
   //  Il caso base e' costituito dal caso di 1 disco.
   //----------------------------------------------------------------*/
   private void muoviTorre (int numDischi, int iniz, int finale, int temp){
      if (numDischi == 1)
         muoviUnDisco (iniz, finale);
      else
      {
         muoviTorre (numDischi-1, iniz, temp, finale);
         muoviUnDisco(iniz, finale);
         muoviTorre (numDischi-1, temp, finale, iniz);
      }
   }

   /*-----------------------------------------------------------------
   // Stampa le istruzioni per muovere un disco dalla torre specificata
   // come iniziale a quella finale.
   //----------------------------------------------------------------*/
   private void muoviUnDisco (int iniz, int finale){
      System.out.println ("muovi un disco da " + iniz + " a " +
                          finale);
   }
}
