Code schreiben, um den Turm von Hanoi Puzzle zu lösen

4 Schritt:Schritt 1: Identifizieren Sie die Basis-Szenario Schritt 2: Code der Recursive Pattern Schritt 3: sie alle zusammen und führen Sie es Schritt 4: Fazit

Code schreiben, um den Turm von Hanoi Puzzle zu lösen

Code schreiben, um den Turm von Hanoi Puzzle zu lösen

Code schreiben, um den Turm von Hanoi Puzzle zu lösen

Code schreiben, um den Turm von Hanoi Puzzle zu lösen

Code schreiben, um den Turm von Hanoi Puzzle zu lösen

F: Was ist der einfachste Weg, um die Summe der ganzen Zahlen zwischen 1 und 100 zu erhalten?
A: Zuerst sollten Sie die Summe aller ganzen Zahlen zwischen 1 und 99, dann fügen Sie 100.
Dumm, nicht wahr? Dies ist tatsächlich ein Beispiel eines leistungsfähigen Teile-und-Herrsche-Technik in der Computerprogrammierung bekannt als "Rekursion." Recursion behandelt eine Rechenaufgabe als eine Reihe von kleineren, ähnliche Berechnungen, mit der nächst kleineren Berechnung berechnet wird, und dann die nächste und die nächste, bis Sie zu einer "base case" mit einer bekannten Antwort zu bekommen. Für den nächsten Schritt des obigen Beispiels, um die Summe der ganzen Zahlen zwischen 1 und 99 zu erhalten, müssen Sie einfach summieren die ganze Zahlen zwischen 1 und 98, dann fügen Sie 99. Wenn Sie weitermachen Sie die Kette, werden Sie an der Basis erhalten Bei Summierung ganze Zahlen zwischen 1 und 1, das wir kennen, ist 1.
Ein Spaß Verwendung der Rekursion ist es, ein Programm, das Sie die Lösung auf die Türme von Hanoi Puzzle geben kann, zu schreiben. Das Puzzle ist in der Abbildung auf dieser Seite angegeben. Das Ziel ist, alle Festplatten aus dem ersten Beitrag zu dem dritten Beitrag zu bewegen. Die Regeln des Puzzles sind:
Sie können nur eine Festplatte bewegen sich mit einer Zeit von einem Pfosten zum anderen, die zu einem bestimmten Zeitpunkt bedeutet, höchstens eine Scheibe kann aus einem Post. Sie können eine beliebige Festplatte an die zweite Stelle als Ruhebereich zu bewegen. Platten können nicht auf einer kleineren Platte bewegt werden.
Wie kann das Rätsel in kleinere Teile zerlegt werden? Wie die Bilder zeigen, kann diese 7-Disk-Version der Türme von Hanoi Puzzle so gelöst werden:

    Lösen Sie die 6-Disk-Version des Puzzles aus Post A nach B zu bewegen Scheibe 7 aus Post A Posten zu Posten C. Lösen Sie die 6-Disk-Version des Puzzles wieder, dieses Mal aus dem Dienst B auf C. veröffentlichen

Aus diesem instructable, werde ich JavaScript als Programmiersprache verwenden, so können Sie diese in einem Standard-Web-Browser ausgeführt werden. Es hilft, werden einige grundlegende Computer-Programmierung Konzepten vertraut, aber selbst wenn Sie nicht sind, hoffentlich instructable wird interessant sein.
Wenn Sie diese instructable möchten, bitte für mich stimmen in der Coded Creations Wahlen vor dem 18. Mai 2015 Danke.
Lassen Sie uns beginnen Codierung!

Schritt 1: Identifizieren Sie die Basis-Szenario


  1. Die einfachste Form der Türme von Hanoi Puzzle hat nur 1 Festplatte. Um eine 1-Platten Türme von Hanoi lösen, bewegen Sie einfach die Festplatte aus dem Dienst A, um zu Posten C. Fertig. In Pseudo-Code (dh ein "Klartext" Weg, um auszudrücken, was ein Computerprogramm tut), wird dies wie folgt aussehen:
      Wenn die Festplatte Sie gerade unterwegs sind ist Platte 1, dh der kleinsten Festplatte (oder die einzige
     Festplatte), und bewegen Sie sie aus dem Dienst A bis C zu schreiben 

    Wenn wir verallgemeinern die obige Ersetzen wir "post A" mit "die Post derzeit sitzt auf," und wir "post C" ersetzen "die Post wir wollen, dass es am Ende."
    Die JavaScript aussieht (Anmerkung, die ich den Verweis auf die Startpfosten und das Ziel-Post verallgemeinert, das ist wichtig, wie im nächsten Schritt beschrieben):
      if (Platte == 1) {// "disk" der Datenträgernummer, wobei 1 die kleinste Festplatte
        document.write ("Move disk" + Disk + "von post" + + zu starten ", um zu Posten" + 
           Ziel + "<br/>.";
        // "Start" stellt den Ausgangs Post, die sich in Abhängigkeit von dem Datenträger abhängig
        // Sie sich bewegen
        // "Ziel" steht für die Ziel-Post, das ändert sich auch in Abhängigkeit
        // Auf der Festplatte Sie sich bewegen
     }
    

Schritt 2: Code der Recursive Pattern


  1. Für N Platten zu lösen, müssen wir in der Lage, für die N-1 Platten zu lösen. Dies ist, wo die Rekursion kommt in. Im Rahmen dieses Plans, um Code, der auf eine andere Anzahl von Festplatten für die puzzle, sowie verschiedene Start- und Ziel Beiträge gilt schreiben wollen.
    Der Pseudo-Code für das aussieht:
      Lösen Sie für N-1 Festplatten, aber verschieben Sie sie aus dem Dienst A nach B zu schreiben
     Bewegen Sie die größte Festplatte (Disk N) aus dem Dienst A bis C zu schreiben
     Lösen Sie für die N-1 Festplatten wieder, und verschieben Sie sie aus dem Dienst B auf C. veröffentlichen 

    Ich habe ausdrücklich bezog sich auf eine, eine Anzeige B und C über Post zu senden, aber der Code muss verallgemeinert werden, da abhängig von der Festplatte, wird der Start und Zielpost Beiträge unterschiedlich sein. Wenn man darüber nachdenkt, sind wir das Rätsel zu lösen 3 mal:
      Umzug N-1 Festplatten aus dem Dienst A nach B zu schreiben Umzug N-1 Festplatten aus dem Dienst B, um zu Posten C Umzug N Platten aus Post A bis C zu schreiben

    Sie müssen also eine verallgemeinerte Programm, können Sie es sagen, was die Start- und Ziel Beiträge sind wird. Was interessant ist, dass Sie nicht wirklich das Schreiben eine Menge Code, der ein großer Teil des Reizes der Rekursion ist. Sie beschreiben einfach in das Programm, wie eine Berechnung in kleinere Stücke zerbrechen, und der Computer erledigt den Rest.
    Die detaillierte Pseudo-Code wie folgt aussieht:
      Wenn die Festplatte Sie sich bewegen ist die kleinste,
       bewegen Sie ihn dann von Anfang Post an das Ziel-Post.
     Andernfalls ...
       Beginnen Sie noch einmal am Anfang der Code mit einem neuen Satz von Eingängen:
         Verwenden Sie eine Festplatte weniger.
         Verwenden Sie die gleiche Start Post.
         Verwenden Sie die Zwischenstation als Zielpfosten.
       Bewegen Sie die größte Festplatte von Anfang Post an das Ziel-Post.
       Beginnen Sie noch einmal am Anfang der Code mit einem neuen Satz von Eingängen:
         Verwenden Sie eine Festplatte weniger.
         Verwenden Sie die Zwischenstation als Start Post.
         Verwenden Sie die gleiche Ziel-Post. 

    Hier ist, wie der JavaScript-Code aussieht:
      Funktion solve_tower_of_hanoi (Disk, Start, Ziel, Inszenierung) {
       if (Platte == 1) {
         // Basisfall von 1 Festplatte, wissen wir, wie zu lösen, dass
         document.write ("Move Platte 1 aus dem Dienst" + + zu starten ", um zu Posten" + Ziel +
           ) "<br/>.";
    
       } Else {
         // Zunächst für alle zu lösen, mit Ausnahme der letzten Scheibe
         solve_tower_of_hanoi (Festplatte - 1, zu starten, Inszenierung, Ziel);
    
         // Jetzt die letzte Platte zu bewegen
         document.write ("Move disk" + Disk + "von post" + + zu starten ", um zu Posten" +
           Ziel + ". <br/>");
    
         // Nun für die restlichen Scheiben lösen
         solve_tower_of_hanoi (Festplatte - 1, Inszenierung, Ziel, Start);
       }
     } 

    Wenn Sie kein Programmierer, lassen Sie mich erklären, dass der Code oben in eine "Funktion", die Sie den gleichen Code mit verschiedenen Eingängen laufen lässt gewickelt. Jetzt können Sie dem Programm sagen, wie viele Scheiben Sie in Ihr Puzzle haben, sowie welche Beiträge sind die Start-, Ziel- und Zwischenstationen. Die Funktion ist auch die Grundlage für die Möglichkeit, Rekursion, in dem der gleiche Code wird immer wieder laufen, aber mit verschiedenen Eingänge (Eingänge sind auch als "Parameter" oder "Argumente" in Programmierjargon genannt) laufen.

Schritt 3: sie alle zusammen und führen Sie es


  1. Eine sehr einfache HTML-Seite mit dem JavaScript-Programm sieht folgendermaßen aus:
      <Html>
     <Body>
     <Script>
     // Aufruf der Funktion zu beginnen das Rätsel zu lösen für 7 Festplatten
     solve_tower_of_hanoi (7, "A", "C", "B");
    
     Funktion solve_tower_of_hanoi (Disk, Start, Ziel, Inszenierung) {
       if (Platte == 1) {
         // Basisfall von 1 Festplatte, wissen wir, wie zu lösen, dass
         document.write ("Move Platte 1 aus dem Dienst" + + zu starten ", um zu Posten" + Ziel +
           ) "<br/>.";
    
       } Else {
         // Zuerst lösen für 6 Festplatten (dh Festplatte - 1)
         solve_tower_of_hanoi (Festplatte - 1, zu starten, Inszenierung, Ziel);
    
         // Jetzt die 7. Platte verschieben
         document.write ("Move disk" + Disk + "von post" + + zu starten ", um zu Posten" +
           Ziel + ". <br/>");
    
         // Jetzt die 6 Disketten von Post B zu C zu posten lösen
         solve_tower_of_hanoi (Festplatte - 1, Inszenierung, Ziel, Start);
       }
     }
     </ Script>
     </ Body>
     </ Html>
    

    Der obige Code ist in der ersten angehängten Datei, die Sie auf Ihrem Computer speichern können (aber entfernen Sie die .txt aus dem Ende des Dateinamens, bevor Sie sie zu speichern), dann mit einem Web-Browser zu öffnen. Wenn Sie, um das Puzzle zu einem anderen Anzahl von Festplatten lösen wollen, bearbeiten Sie die Datei mit einem Texteditor (wie "Notepad" auf PCs) und ändern Sie die "7" in Zeile 5 auf die Anzahl der Festplatten Sie wollen.
    Ebenfalls angebracht ist eine etwas anspruchsvollere Version dieses Programm, das Sie in der Anzahl der Festplatten direkt in der Web-Seite eingeben können.

Schritt 4: Fazit


  1. Der Turm von Hanoi Puzzle ist ein großartiges Beispiel dafür, wie Rekursion kann leichter ein Problem zu lösen. Wenn Sie versuchen, eine Lösung zu Türme von Hanoi mit anderen Mitteln zu kodieren sind, wäre es viel komplizierter und würde ein bisschen mehr Gedanken zu nehmen.
    Rekursion kann für eine Vielzahl von Aufgaben, einschließlich Berechnungen, Sortierwerte und schnell zu finden Wert in einer sortierten Liste verwendet werden. Und während es oft nicht die beste Methode für die Programmierung, wie es ist oft langsam und ressourcenintensiv auf dem Computer im Vergleich zu anderen Kodierungsverfahren, ist es zu einem großartigen Lernwerkzeug für darüber nachzudenken, wie in handliche Stücke zerlegen ein Problem. Und die Fähigkeit, ein Problem in kleinere Stücke zu brechen ist eine wertvolle Mann für Computerprogrammierung.