1 / 5

Towers of Hanoi

Towers of Hanoi. Three pegs, one with n disks of decreasing diameter; two other pegs are empty Task: move all disks to the third peg under the following constraints Can move only the topmost disk from one peg to another in one step Cannot place a smaller disk below a larger one

tamira
Télécharger la présentation

Towers of Hanoi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Towers of Hanoi • Three pegs, one with n disks of decreasing diameter; two other pegs are empty • Task: move all disks to the third peg under the following constraints • Can move only the topmost disk from one peg to another in one step • Cannot place a smaller disk below a larger one • An example where recursion is much easier to formulate than a loop-based solution

  2. Towers of Hanoi • We want to write a recursive method shift (n, source, target, using) which moves n disks from peg ‘source’ to ‘target’ with the help of peg ‘using’ for intermediate transfers • The first step is to formulate the algorithm • Observation: shift (n, source, target, using) Ξ shift (n-1, source, using, target) followed by transferring the largest disk from peg ‘source’ to peg ‘target’ and then calling shift (n-1, using, target, source) • Stopping condition: n = 1

  3. Tower of Hanoi class hanoi{ static int counter = 0; public static void shift(int n, char source, char target, char using){ counter = counter + 1; if (n==1) System.out.println(source+" -> "+target); else if (n > 1) { shift(n-1,source,using,target); System.out.println(source+" -> "+target); shift(n-1,using,target,source); } } // How many moves needed? 2n-1

  4. Tower of Hanoi public static void main (String args[]) { int n = 3; shift(n,'a','c','b'); System.out.println(counter); } }

  5. Towers of Hanoi • Total number of method calls Let Tn be the number of method calls to solve for n disks Tn = 2Tn-1 + 1 for n > 1; T1 = 1

More Related