[Haskell-beginners] tower hanoi problem

Dudley Brooks dbrooks at runforyourlife.org
Sun Feb 15 20:54:36 UTC 2015


In my opinion, advising Mr Wobben to watch the pattern of moves will 
*not* lead him to the recursive solution, since the pattern of moves is 
really iterative.

My hint would be to remember the very nature of recursion itself (for 
*any* problem):  Do the first step.  Then (to put it very dramatically) 
do *everything else* in *a single step*!  (Realizing that "everything 
else" is really the same problem, just made slightly smaller.)

Note:  "A single step" might itself have more than one step.  My point 
is that recursion consists of (to put it humorously):  To do 
ABCDEFGHIJKLMNOPQRSTUVWXYZ, first you do A, then you do 
BCDEFGHIJKLMNOPQRSTUVWXYZ.  And, of course, "first" might actually be 
"last"!  And remembering the story of the Gordian Knot might help too.  
(I apologize that trying not to be too explicit in the hint possibly 
makes it even more obscure.)

Here's another hint that's useful for all kinds of programming problems, 
not just recursion:  Most problems consist of not only what you're 
trying to solve, but also what the restrictions are on what you're 
allowed to do to solve it.  Often some good insights come from imagining 
how you could solve the problem if you could ignore one or more of the 
restrictions (that's what I meant by the Gordian Knot reference).  So 
for the Towers of Hanoi, think about what the restrictions are on what 
kind of moves you're allowed to make.  Remove one of those restrictions.

(Speaking of the iterative solution, the fun thing about actually 
physically doing the Towers of Hanoi is that, even though you're doing 
it by remembering the steps of the iterative pattern, as you watch the 
towers grow and shrink you can kind of "see" the recursion.)

On 2/15/15 12:51 AM, Roelof Wobben wrote:
> YCH schreef op 15-2-2015 om 9:45:
>> How about if I say "Actually target was c not b and here is one more
>> disc. I put it on a. Now you should move all to c"
>>
>>
>
> Hanoi 1 a b c
>
> A -> C
>
> Hanoi 2 a b c
>
> A -> B
> A -> C
> B -> C
>
> Hanoi 3 a b c
>
> A -> C
> A -> B
> C -> B
> A -> C
> B -> A
> B -> C
> A -> C
>
>
> Roelof
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners



More information about the Beginners mailing list