in reply to Recursion Confusion
Sometimes I find with recursion it helps to add some tracking to help visualise what path is being followed.
Hope this helps
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); } }
n=3, start=A end=C extra=B Calling hanoi 1 n=2, start=A end=B extra=C Calling hanoi 1 n=1, start=A end=C extra=B Move disk #1 from A to C Move disk #2 from A to B Calling hanoi 2 n=1, start=C end=B extra=A Move disk #1 from C to B Move disk #3 from A to C Calling hanoi 2 n=2, start=B end=C extra=A Calling hanoi 1 n=1, start=B end=A extra=C Move disk #1 from B to A Move disk #2 from B to C Calling hanoi 2 n=1, start=A end=C extra=B Move disk #1 from A to C
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Recursion Confusion
by live4tech (Sexton) on Apr 29, 2013 at 03:55 UTC | |
by rnewsham (Curate) on Apr 29, 2013 at 07:14 UTC |
In Section
Seekers of Perl Wisdom