#!/usr/bin/perl -w use strict; my $recursion = 0; sub hanoi { my ($n, $start, $end, $extra) = @_; $recursion++; my $indent = " " x $recursion; print $indent, "Entering hanoi($n, $start, $end, $extra)\n"; if ($n == 1) { print $indent, "Move disk #1 from $start to $end.\n"; } else { hanoi($n-1, $start, $extra, $end); print $indent, "Move disk #$n from $start to $end.\n"; hanoi($n-1, $extra, $end, $start); } print $indent, "Leaving hanoi($n, $start, $end, $extra)\n"; $recursion--; } hanoi(3, 'A', 'C', 'B'); __END__ Entering hanoi(3, A, C, B) Entering hanoi(2, A, B, C) Entering hanoi(1, A, C, B) Move disk #1 from A to C. Leaving hanoi(1, A, C, B) Move disk #2 from A to B. Entering hanoi(1, C, B, A) Move disk #1 from C to B. Leaving hanoi(1, C, B, A) Leaving hanoi(2, A, B, C) Move disk #3 from A to C. Entering hanoi(2, B, C, A) Entering hanoi(1, B, A, C) Move disk #1 from B to A. Leaving hanoi(1, B, A, C) Move disk #2 from B to C. Entering hanoi(1, A, C, B) Move disk #1 from A to C. Leaving hanoi(1, A, C, B) Leaving hanoi(2, B, C, A) Leaving hanoi(3, A, C, B)