Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:rekursion:tuerme_hanoi:start [20.01.2022 10:19] – sbel | faecher:informatik:oberstufe:algorithmen:rekursion:tuerme_hanoi:start [11.12.2023 15:42] (aktuell) – [Analyse] Marco Kuemmel | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
Das Problem beim Turm von Hanoi besteht in der folgende Aufgabe: | Das Problem beim Turm von Hanoi besteht in der folgende Aufgabe: | ||
- | - Gegeben ist ein Turm auf einem Standplatz A aus n Scheiben, die übereinander liegen, und zwar immer eine kleinere auf einer | + | - Gegeben ist ein Turm auf einem Standplatz A aus n Scheiben, die übereinander liegen, und zwar immer eine kleinere auf einer größeren Scheibe. |
- | größeren Scheibe. | + | - Der Turm soll auf einen zweiten Platz B umgesetzt werden, wobei aber beim Umsetzen immer nur eine kleinere auf eine größere Scheibe gelegt werden darf. Es darf stets nur eine Scheibe bewegt werden. |
- | - Der Turm soll auf einen zweiten Platz B umgesetzt werden, wobei aber beim Umsetzen immer nur eine kleinere auf eine | + | |
- | größere Scheibe gelegt werden darf. Es darf stets nur eine Scheibe bewegt werden. | + | |
- Bei der Umsetzung darf ein dritter Hilfsplatz C mitbenutzt werden. | - Bei der Umsetzung darf ein dritter Hilfsplatz C mitbenutzt werden. | ||
+ | |||
+ | Du kannst das Spiel hier ausprobieren: | ||
+ | |||
+ | ===== Analyse ===== | ||
+ | |||
+ | Bei genauerer Analyse des Problems, kann man erkennen, dass es rekursiver Natur ist: Beim Umsetzen des Turms mit '' | ||
+ | |||
+ | Dann kann man die größte Scheibe nach **B** setzen und muss anschließend nochmal den '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Vollziehe den rekursiven Charakter des Problems in der Simulation nach, indem du Türme mit 1,2,3,4 Scheiben umsetzt und dir dabei klar machst, dass du jeweils auf das Verfahren des vorigen Schritts mit n-1 Scheiben zurückgreifen kannst. | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Modelliere das Problem in Java. Als ADT kannst du einen Stack verwenden, den es in der Java Standardbibliothek gibt: | ||
+ | |||
+ | <code java> | ||
+ | import java.util.Stack; | ||
+ | [...] | ||
+ | public class Hanoi { | ||
+ | int numDiscs; | ||
+ | Stack< | ||
+ | Stack< | ||
+ | Stack< | ||
+ | [...] | ||
+ | public Hanoi() { | ||
+ | // ersten Stapel füllen | ||
+ | } | ||
+ | |||
+ | // schiebe Turm von ... nach ... | ||
+ | public void move([...]) { | ||
+ | |||
+ | } | ||
+ | |||
+ | // alle drei Türme ausgeben | ||
+ | public void printState() { | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | * Implementiere den Konstruktor, | ||
+ | * Implementiere zunächst die Methode '' | ||
+ | * Implementiere die Rekursive Funktion '' | ||
+ | |||
+ | === Hinweise und Hilfestellungen === | ||
+ | |||
+ | * [[https:// | ||
+ | * Die Türme werden durch Stacks von Integern repräsentiert. Die einzigen benötigten Stack-Methoden sind '' | ||
+ | * Überlege dir beim Programmieren der Methode '' | ||
+ | * Die Methode '' | ||
+ | * Die Methode '' | ||
+ | * Beachte: Beim Ausgeben eines Stacks ('' | ||
+ | |||
+ |