use warnings; use strict; my $ndisks = 3; hanoi( $ndisks, 'A', 'C', 'B', 0 ); sub hanoi { my( $n, $start, $end, $extra, $depth ) = @_; print "\t"x$depth . "n=$n, start=$start end=$end extra=$extra\n"; if( $n == 1 ) { print "\t"x$depth . "Move disk #$n from $start to $end\n"; } else { $depth++; print "\t"x$depth . "Calling hanoi 1\n"; hanoi( $n-1, $start, $extra, $end, $depth); print "\t"x$depth . "Move disk #$n from $start to $end\n"; print "\t"x$depth . "Calling hanoi 2\n"; hanoi ($n-1, $extra, $end, $start, $depth); } }