Welcome to Dream.In.Code
Getting Help is Easy!

Join 132,677 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 1,207 people online right now. Registration is fast and FREE... Join Now!




Towers of Hanoi

 
Reply to this topicStart new topic

Towers of Hanoi

AfterBurner66
post 12 Sep, 2008 - 02:25 PM
Post #1


New D.I.C Head

*
Joined: 2 Aug, 2008
Posts: 16


My Contributions


Hi all!
As a person who has not a Computer Science degree(I am a poor web developer!),but having much desire to learn as much as I can about CS topics,I have a (maybe easy huh.gif) question about the recursive algorithm that solves the "Towers of Hanoi" puzzle.
I can understand that generally,having n discs and A,B,C pegs,the strategy is:
1.move (n-1) discs from A to B.
2.move nth disc from A to C.
3.move the (n-1) discs from B to C.Done!
but this is implemented in whatever procedural language with a function,and the one thing that changes,is the order of arguments.OK so far but how do we assure that algorithm does recursively the moves that must be done and not something else?In other words how to be sure that changing of passed arguments leads to the correct solution?Because of two recursive functions used(I have studied implementations in Pascal,C,Java so far),it was difficult for me to construct a tracetable,because at the point of second recursive function call,things get much complicated I think,due to the fact that on return of function call,first recursive function is encountered first and after that we go to second etc.
So is there any idea about how to construct a tracetable "safely",or at least how to trace the whole procedure?
I tried also to solve the problem with the physical moves of discs required,but I didn't manage to map this to the recursive function calls.And something maybe more elementary:in what sense do we have recursion in this problem/
Any help or resource would be appreciated.Thanks in advance!
User is offlineProfile CardPM

Go to the top of the page

AdamSpeight2008
post 12 Sep, 2008 - 05:42 PM
Post #2


LINQ D.I.C.

Group Icon
Joined: 29 May, 2008
Posts: 756



Thanked 48 times

Dream Kudos: 2125
My Contributions


I hope this helps. It is a vb.net console app version.
When run it will visually show you the current depth of recursion and the variables values.
vb

Module Module1
Const ShowTrace As Boolean = True
Dim level As Integer = 0
Dim i As Integer = 0
Dim c As Char = " "

Sub Main()
Hanoi(6)
Console.ReadKey()
End Sub

Private Sub Hanoi(ByVal n As Integer)
i = 0
Call DoHanoi(1, 2, 3, n)
End Sub


Private Sub DoHanoi(ByVal f As Integer, ByVal u As Integer, ByVal t As Integer, ByVal n As Integer)
If ShowTrace Then level += 1
If ShowTrace Then Console.WriteLine(Strings.StrDup(level, c) & "Entering DoHanoi({0},{1},{2},{3})", f, u, t, n)
If n = 1 Then
i += 1
Console.WriteLine(IIf(ShowTrace, Strings.StrDup(level, c), "") & "{0}. Move {1} to {2} ", i, f, t)
Else
DoHanoi(f, t, u, n - 1)
DoHanoi(f, u, t, 1)
DoHanoi(u, f, t, n - 1)
End If
If ShowTrace Then Console.WriteLine(Strings.StrDup(level, c) & "Exiting DoHanoi")
If ShowTrace Then level -= 1

End Sub
End Module
User is offlineProfile CardPM

Go to the top of the page

AfterBurner66
post 13 Sep, 2008 - 06:41 PM
Post #3


New D.I.C Head

*
Joined: 2 Aug, 2008
Posts: 16


My Contributions


Thanks a lot AdamSpeight2008!This really helps.Though I don't know much VB,this is the better "towers of hanoi" program I've ever seen, by far.I can trace the procedure very well.Thanks again!
User is offlineProfile CardPM

Go to the top of the page

Fast ReplyReply to this topicStart new topic
Time is now: 11/23/08 06:32AM

Live Help!

Tutorials

Programming

Web Development

Reference Sheets

Code Snippets

Bye Bye Ads

Free DIC T-Shirt

T-Shirt Example

Related Sites

Monthly Drawing

Thumb Drive

Partners

Top Contributors

Top 10 Kudos This Month