10 A=1:B=2:C=3:print chr$(147)
20 input "quanti dischi";D:print "si risolve con "2^D-1" mosse{down}"
30 N=D:SP=49151:PRINT "inizio sp="SP:M=0
40 REM SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:
50 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
60 GOSUB 80:REM 1a CHIAMATA  Hanoi($n, $a, $b ,$c);
70 PRINT "fine sp="SP:END

80 if N>1 then 150:REM RAMO1:E' COME DIRE IF N=1 ALLORA EESGUI LE RIGHE SEGUENTI
90 M=M+1:PRINT "ramo 1 mossa"M": muovi #" A " -> #" C
100 REM RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK
110 C=PEEK(SP):SP=SP-1:B=PEEK(SP):SP=SP-1:A=PEEK(SP):SP=SP-1:N=PEEK(SP):SP=SP-1
120 REM PRINT "ritorno dalla ricorsione ramo 1"
130 RETURN

140 REM ELSE (N>1): RAMO 2
150 N=N-1
160 REM SALVO LE VARIABILI NELLO STACK:
170 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
180 X=B:B=C:C=X:REM SCAMBIO B CON C  Hanoi($n, $a, $c ,$b);
190 GOSUB 80
200 M=M+1:PRINT "ramo 2 mossa"M": muovi #" A " -> #" C
210 REM SALVO LE VARIABILI NELLO STACK:
220 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
230 X=A:A=B:B=X:REM SCAMBIO A CON B  hanoi($n, $b, $a ,$c);
240 GOSUB 80
250 REM RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK
260 C=PEEK(SP):SP=SP-1:B=PEEK(SP):SP=SP-1:A=PEEK(SP):SP=SP-1:N=PEEK(SP):SP=SP-1
270 REM PRINT "ritorno dalla ricorsione ramo 2"
280 RETURN