Salve a tutti!
Avrei un problema con una ricorsione multipla in Java....

Mi stavo esercitando sulla famigerata Torre di Hanoi, ed ho scritto il mio codice Java affinché, dato in input un intero n, io potessi ottenere in output una sequenza del tipo:

"disco preso in esame al momento + piolo_origine + piolo_destinazione".

Ora... l'algoritmo viene considerato corretto se, alla fine, tutti i dischi si trovano sul terzo piolo. il problema è che IN PARTE ottengo una soluzione corretta, ma il mio output non contiene gli ultimi passaggi! Ad esempio: se voglio sperimentare l'algoritmo per un numero di dischi n = 2 allora la sequenza che dovrei avere in output è la seguente (facendo notare che è considerata sbagliata la sequenza che sposta un disco dal piolo 1 direttamente al piolo 3. E' insomma necessario effettuare passaggio per passaggio, da un piolo all'altro, in maniera sequenziale):

1 1 2
1 2 3
2 1 2
1 3 2
1 2 1
2 2 3
1 1 2
1 2 3

mentre invece il mio output si blocca alla 5^ (compresa) di quelle 8 righe!
Come mai? Cosa ho sbagliato nella ricorsione...?

Il codice che ho sviluppato è quello che segue qui in basso...
Perdonatemi comunque gli erroroni, sono alle prime armi e ancora devo destreggiarmi meglio col Java...!

Grazie mille in anticipo!

codice:
import java.util.Scanner;

class Hanoi {

	private static void spostaUnDisco(int disc, int sorg, int dest)
	{
		System.out.println("" + disc + "" + sorg + "" + dest );
	}
	
	private static void sposta(int disc, int sorg, int intermedio, int dest) 
	{
		if(disc > 8 || disc <0) /* In caso di input errato (rispetto ai vincoli imposti),
								* viene stampato un messaggio di errore. Conseguentemente, 
								* viene generata un'interruzione dell'algoritmo.*/
				
		{
			System.out.println("Il numero inserito eccede il range 0 <= n <= 8 !");
			return;
		}		

	 // ALGORITMO "TORRE DI HANOI": 
	 // CASO BASE: il disco da spostare è solamente uno. Quindi: ho concluso in due passi.
	   if (disc == 1)
	   	{
		   spostaUnDisco(disc, sorg, intermedio);
		   		spostaUnDisco(disc, intermedio, dest);
	   	}
	   else // CASO RICORSIVO
	   {
		   sposta(disc-1, sorg, intermedio, dest);
		   spostaUnDisco(disc, sorg, intermedio);
		   sposta(disc-1, dest, intermedio, sorg);
   		}

 }
 
 public static void main(String args[]) 
  {
	 Scanner n = new Scanner(System.in);
	 System.out.println("Quanti dischi vuoi usare?");
	 sposta(n.nextInt(), 1, 2, 3);
  }
 
}