in reply to cannot follow hanoi subroutine
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)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: cannot follow hanoi subroutine
by convenientstore (Pilgrim) on Nov 06, 2007 at 04:11 UTC | |
by dcd (Scribe) on Nov 06, 2007 at 06:47 UTC | |
by erroneousBollock (Curate) on Nov 06, 2007 at 04:27 UTC | |
by joel.neely (Novice) on Nov 06, 2007 at 13:26 UTC | |
by erroneousBollock (Curate) on Nov 06, 2007 at 15:50 UTC | |
by tilly (Archbishop) on Nov 06, 2007 at 21:56 UTC | |
by Dominus (Parson) on Nov 06, 2007 at 15:27 UTC | |
by convenientstore (Pilgrim) on Nov 06, 2007 at 16:52 UTC | |
by tilly (Archbishop) on Nov 06, 2007 at 19:37 UTC | |
by convenientstore (Pilgrim) on Nov 06, 2007 at 21:57 UTC |