As the saying goes, to understand recursion you must first understand recursion. But hopefully this simple output will help you get that "ah hah!" moment where it starts to make sense.#!/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)
In reply to Re: cannot follow hanoi subroutine
by tilly
in thread cannot follow hanoi subroutine
by convenientstore
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |