05 Rekursionen
05 Rekursionen
Rekursionen
©image: various
[1] [Link]
[Link]
[Link]
Die wichtigsten Merkmale fraktaler Strukturen sind: [1]
1. Selbstähnlichkeit
Mandelbrots Definition:
"When each piece of a shape is geometrically similar to the whole,
both the shape and the cascade that generate it are called self-similar."
2. Skaleninvarianz
Absolutwerte sind irrelevant; ein Fraktal kann theoretisch
unendlich oft vergrößert werden, ohne dass eine
Veränderung der Form bemerkbar wird.
[1] [Link]
[Link]
[Link]
Kochkurve
[Link]
[Link]
[Link]
Kochkurve
[Link]
[Link]
[Link]
Kochkurve
[Link]
[Link]
[Link]
Kochkurve
[Link]
[Link]
[Link]
Kochkurve
Heute
• XXX
[Link]
66d6b4c6-50b5-4952-8c18-94f75e43fb36
Schneeflocke vs. kochschen Schneeflocke
[Link]
66d6b4c6-50b5-4952-8c18-94f75e43fb36
L-System „dreidimensionale Busch-ähnliche Pflanze“
[1] [Link]
Von Fraktalen zur Rekursion
• Als Rekursion (lateinisch recurrere ‚zurücklaufen‘) wird ein prinzipiell
unendlicher Vorgang, der sich selbst als Teil enthält oder mithilfe von
sich selbst definierbar ist, bezeichnet.
• „Der Begriff [Rekursion] ist sehr umfassend“.
In der Natur handelt es sich um einen häufig beobachtbaren Vorgang
(z. B. beim Pflanzenwachstum)
• Fraktale Muster werden oft durch rekursive Operationen erzeugt.
Auch einfache Erzeugungsregeln ergeben nach wenigen
Rekursionsschritten schon komplexe Muster.
[Link]
[Link]
[Link]
Kurze Wiederholung Funktionen
Funktionen Beispiele
◼ Aufbau: ◼ Autowerkstatt
◼ Funktionsaufruf ◼ Auto mit Auftrag abgeben (Aufruf, Parameter)
◼ Funktionskopf (Prototyp, mit Argumenten) ◼ Arbeiten in der Werkstatt
◼ Funktionsrumpf ◼ Rückgabe Auto und Rechnung
◼ Rückgabewert
◼ Pizza liefern
◼ Bestellung
◼ Kochen
◼ Liefern
Iterative und rekursive Funktionen
◼ Iteration: Darunter versteht man das mehrmalige Ausführen einer Aktion. Hierzu nutzt man
Kontrollstrukturen wie Schleifen (for, while, …). Eine iterative Funktion hat also eine derartige
Kontrollstruktur im Funktionskörper.
➢ Kennen wir bereits!
◼ Rekursion: Darunter versteht man ebenfalls das mehrmalige Ausführen einer Aktion. Doch diesmal
nutzen wir keine Schleife, sondern die Funktion ruft sich selbst auf. Rekursive Funktionen sind
dadurch charakterisiert, dass diese
◼ Eine Abbruchbedingung brauchen
◼ Sich selbst aufrufen
➢ Algorithmen können sowohl iterativ als auch rekursiv formuliert werden
➢ Rekursionen lassen sich oftmals einfacher darstellen
➢ Iterationen sind oftmals effizienter, da das Zwischenergebnis der einzelnen Funktionsaufrufe nicht gespeichert
werden muss. Bei einer Rekursion müssen im Stack des Arbeitsspeichers die Zwischenergebnisse abgelegt
werden.
◼ Damit wir das besser verstehen können, schauen wir uns Beispiele an ..
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟐, 𝐧 = 𝟐 → 𝟐𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=2, n=2 2 * powRe(2, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟐, 𝐧 = 𝟐 → 𝟐𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=2, n=2 2 * powRe(2, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟐, 𝐧 = 𝟐 → 𝟐𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=2, n=2 2 * powRe(2, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟐, 𝐧 = 𝟐 → 𝟐𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=2, n=2 2 * powRe(2, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
Abbruchbedingung
◼ Beispiel 𝐚 = 𝟐, 𝐧 = 𝟐 → 𝟐𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=2, n=2 2 * powRe(2, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟐, 𝐧 = 𝟐 → 𝟐𝟐
Sich selbst aufrufend
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=2, n=2 2 * powRe(2, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=2, n=1 2 * powRe(2, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=3, n=1 3 * powRe(3, 0)
➢ Somit haben wir einen rekursiven Ansatz a=2, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
Abbruchbedingung
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=3, n=1 3 * powRe(3, 0)
➢ Somit haben wir einen rekursiven Ansatz a=3, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=3, n=1 3 * powRe(3, 0)
➢ Somit haben wir einen rekursiven Ansatz a=3, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=3, n=1 3 * powRe(3, 0) 3*1
➢ Somit haben wir einen rekursiven Ansatz a=3, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1)
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=3, n=1 3 * powRe(3, 0) 3*1
➢ Somit haben wir einen rekursiven Ansatz a=3, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Rekursive Formulierung powRe()
𝒏
◼ Beispiel Potenzfunktion mit 𝒑 = 𝒂
◼ Iterative Formulierung powIt()
◼ Beispiel 𝐚 = 𝟑, 𝐧 = 𝟑 → 𝟑𝟐
1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
◼ Anstatt 𝒑 = 𝒂𝒏 können wir auch schreiben
1, für 𝑛 = 0 a=3, n=2 3 * powRe(3, 1) 3*3*1
𝑎𝑛 = ቊ
𝑎 ∙ 𝑎𝑛−1 , sonst a=3, n=1 3 * powRe(3, 0) 3*1
➢ Somit haben wir einen rekursiven Ansatz a=3, n=0 1 1
a=2, n=1 2*1 2
a=2, n=2 2*2 4
Iterative und rekursive Funktionen (Beispiel)
◼ Hauptprogramm Potenzfunktion
◼ Ausgabe
Iterative und rekursive Funktionen (Beispiel 2)
◼ Rekursive Formulierung facultyRe()
◼ Beispiel Fakultät faculty(k) mit 𝑘! = ς𝑘𝑛=1 𝑛
◼ Iterative Formulierung facultyIt()
◼ Beispiel 𝒏 = 𝟑
◼ Anstatt 𝑘! = ς𝑘𝑛=1 𝑛 können wir auch 1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
schreiben
k=3 3 * facultyRe(2)
1, falls 𝑘 = 1
𝑘! = ቊ k=2 2 * facultyRe(1)
𝑘 ∙ 𝑘 − 1 !, ∀𝑘 > 1
k=1 1 1
➢ Somit haben wir eine rekursive Vorschrift
k=2 2*1 2
k=3 3*2*1 6
Iterative und rekursive Funktionen (Beispiel 2)
◼ Rekursive Formulierung facultyRe()
◼ Beispiel Fakultät faculty(k) mit 𝑘! = ς𝑘𝑛=1 𝑛
◼ Iterative Formulierung facultyIt()
◼ Beispiel 𝒏 = 𝟑
◼ Anstatt 𝑘! = ς𝑘𝑛=1 𝑛 können wir auch 1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
schreiben
k=3 3 * facultyRe(2)
1, falls 𝑘 = 1
𝑘! = ቊ k=2 2 * facultyRe(1)
𝑘 ∙ 𝑘 − 1 !, ∀𝑘 > 1
k=1 1 1
➢ Somit haben wir eine rekursive Vorschrift
k=2 2*1 2
k=3 3*2*1 6
Iterative und rekursive Funktionen (Beispiel 2)
◼ Rekursive Formulierung facultyRe()
◼ Beispiel Fakultät faculty(k) mit 𝑘! = ς𝑘𝑛=1 𝑛
◼ Iterative Formulierung facultyIt()
◼ Beispiel 𝒏 = 𝟑
◼ Anstatt 𝑘! = ς𝑘𝑛=1 𝑛 können wir auch 1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
schreiben
k=3 3 * facultyRe(2)
1, falls 𝑘 = 1
𝑘! = ቊ k=2 2 * facultyRe(1)
𝑘 ∙ 𝑘 − 1 !, ∀𝑘 > 1
k=1 1 1
➢ Somit haben wir eine rekursive Vorschrift
k=2 2*1 2
k=3 3*2*1 6
Iterative und rekursive Funktionen (Beispiel 2)
◼ Rekursive Formulierung facultyRe()
◼ Beispiel Fakultät faculty(k) mit 𝑘! = ς𝑘𝑛=1 𝑛
◼ Iterative Formulierung facultyIt()
Übungsaufgabe…
◼ Beispiel 𝒏 = 𝟑
◼ Anstatt 𝑘! = ς𝑘𝑛=1 𝑛 können wir auch 1. Aufruf 2. Aufruf 3. Aufruf Berechnung Ergebnis
schreiben
k=3 3 * facultyRe(2)
1, falls 𝑘 = 1
𝑘! = ቊ k=2 2 * facultyRe(1)
𝑘 ∙ 𝑘 − 1 !, ∀𝑘 > 1
k=1 1 1
➢ Somit haben wir eine rekursive Vorschrift
k=2 2*1 2
k=3 3*2*1 6
Checkliste: was muss bei der Rekursion gegeben sein?
(1) Klarheit: mit welchen Argumenten wird die Funktion ◼ Beispiel Bildschirm-Ausgabe
aufgerufen?
◼ Welche Ausgabe produziert ◼ Die berühmte Mathematikerin ◼ Schreiben Sie einen Countdown,
diese Funktion für Dr. G. Auss hat folgende der von 10 abwärts zählt und die
Eingabewerte > 0 ? [1] Funktion zur Berechnung einer Zahlen jeweils ausgibt.
Summe vorgeschlagen. Was hat An Stelle von 0 soll allerdings
Dr. Auss übersehen? "Go" ausgegeben werden.
k=3 3 * facultyRe(2)
k=2 2 * facultyRe(1)
k=1 1 1
k=2 2*1 2
k=3 3*2*1 6
Mehr Übungen: Rekursion (1)
◼ Welche Ausgabe produziert ◼ Die berühmte Mathematikerin ◼ Schreiben Sie einen Countdown,
diese Funktion für Dr. G. Auss hat folgende der von 10 abwärts zählt und die
Eingabewerte > 0 ? [1] Funktion zur Berechnung einer Zahlen jeweils ausgibt.
Summe vorgeschlagen. Was hat An Stelle von 0 soll allerdings
Dr. Auss übersehen? "Go" ausgegeben werden.
k=3 3 * facultyRe(2)
k=2 2 * facultyRe(1)
k=1 1 1
k=2 2*1 2
k=3 3*2*1 6
Mehr Übungen: Rekursion (1)
Lösung:
◼ Welche Ausgabe produziert
diese Funktion für ◼ Die Funktion spring immer zwischen positiven und negativen
Eingabewerte > 0 ? [1] Zahlen hin- und her und halbiert diese im Betrag dabei jeweils,
so dass sie sicher bei der Division
1 𝑜𝑑𝑒𝑟 − 1
=0
2
k=3 3 * facultyRe(2)
k=2 2 * facultyRe(1)
k=1 1 1
k=2 2*1 2
k=3 3*2*1 6
Mehr Übungen: Rekursion (1)
◼ Welche Ausgabe produziert ◼ Die berühmte Mathematikerin ◼ Schreiben Sie einen Countdown,
diese Funktion für Dr. G. Auss hat folgende der von 10 abwärts zählt und die
Eingabewerte > 0 ? [1] Funktion zur Berechnung einer Zahlen jeweils ausgibt.
Summe vorgeschlagen. Was hat An Stelle von 0 soll allerdings
Dr. Auss übersehen? "Go" ausgegeben werden.
k=3 3 * facultyRe(2)
k=2 2 * facultyRe(1)
k=1 1 1
k=2 2*1 2
k=3 3*2*1 6
Mehr Übungen: Rekursion (1)
◼ Welche Ausgabe produziert ◼ Die berühmte Mathematikerin ◼ Schreiben Sie einen Countdown,
diese Funktion für Dr. G. Auss hat folgende der von 10 abwärts zählt und die
Eingabewerte > 0 ? [1] Funktion zur Berechnung einer Zahlen jeweils ausgibt.
Summe vorgeschlagen. Was hat An Stelle von 0 soll allerdings
Dr. Auss übersehen? "Go" ausgegeben werden.
◼ Welche Ausgabe produziert ◼ Die berühmte Mathematikerin ◼ Schreiben Sie einen Countdown,
diese Funktion für Dr. G. Auss hat folgende der von 10 abwärts zählt und die
Eingabewerte > 0 ? [1] Funktion zur Berechnung einer Zahlen jeweils ausgibt.
Summe vorgeschlagen. Was hat An Stelle von 0 soll allerdings
Dr. Auss übersehen? "Go" ausgegeben werden.
Die Türme von Hanoi
Die Legende* sagt, dass das Ende der Welt kommt, wenn die Mönche ihre Aufgabe beendet haben.
(*) Die Wahrheit über den Ursprung der „Legende“ finden Sie hier:
[Link]
[Link]
Die Türme von Hanoi (online spielen)
[Link]
Rekursive Lösung: Türme von Hanoi
Start: Ziel
A B C
Rekursive Lösung: Türme von Hanoi
Start: Ziel
A B C
Wenn wir wüssten, wie man die oberen 7 bis auf die letzte Schreibe auf Stab C bringen könnte,
wäre das Problem schon einfacher…
Rekursive Lösung: Türme von Hanoi
Start: Ziel
A B C
Wenn wir wüssten, wie man die oberen 7 bis auf die letzte Schreibe auf Stab C bringen könnte,
wäre das Problem schon einfacher… dann nur Scheibe 8 nach B …..
Rekursive Lösung: Türme von Hanoi
Start: Ziel
A B C
Wenn wir wüssten, wie man die oberen 7 bis auf die letzte Schreibe auf Stab C bringen könnte,
wäre das Problem schon einfacher… dann nur Scheibe 8 nach B .. dann 7 Scheiben nach B.
Rekursive Lösung: Türme von Hanoi
Start: Ziel
A B C
Start:
8 Scheiben nach B
Wenn wir wüssten, wie man die oberen 7 bis auf die letzte Schreibe auf Stab C bringen könnte,
wäre das Problem schon einfacher… dann nur Scheibe 8 nach B .. dann 7 Scheiben nach B.
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach A
A 1 B C
2 3
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach A
A B C
? ?
?
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 7te von Stab C nach Stab B; 6 Scheiben von Stab A nach B
A B C
3 1
2
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 7te von Stab C nach Stab B; 6 Scheiben von Stab A nach B
A B C
? ?
?
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 7te von Stab C nach Stab B; 6 Scheiben von Stab A nach B
− 5 bis auf die letzte Schreibe von Stab A auf Stab C; 6te von Stab A nach Stab B; 5 Scheiben von Stab C nach B
A 1 B C
2 3
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 7te von Stab C nach Stab B; 6 Scheiben von Stab A nach B
− 5 bis auf die letzte Schreibe von Stab A auf Stab C; 6te von Stab A nach Stab B; 5 Scheiben von Stab C nach B
usw…
Abbruchbedingung: Nur noch eine Scheibe muss bewegt werden, das geht nach Regeln.
Rekursive Lösung: Türme von Hanoi
Aufgabe: 8 Scheiben von A nach B:
− 7 bis auf die letzte Schreibe von Stab A auf Stab C; 8te von Stab A nach Stab B; 7 Scheiben von Stab C nach B.
− 6 bis auf die letzte Schreibe von Stab C auf Stab A; 7te von Stab C nach Stab B; 6 Scheiben von Stab A nach B
− 5 bis auf die letzte Schreibe von Stab A auf Stab C; 6te von Stab A nach Stab B; 5 Scheiben von Stab C nach B
usw…
1Abbruchbedingung: Nur noch eine Scheibe muss bewegt werden, das geht nach Regeln.
1Abbruchbedingung: Nur noch eine Scheibe muss bewegt werden, das geht nach Regeln.
1Abbruchbedingung: Nur noch eine Scheibe muss bewegt werden, das geht nach Regeln.
1Abbruchbedingung: Nur noch eine Scheibe muss bewegt werden, das geht nach Regeln.
1Abbruchbedingung: Nur noch eine Scheibe muss bewegt werden, das geht nach Regeln.
5 Information über den jeweiligen
Arbeitsstapel
void Bewege(char StartStapel, char ZielStapel, char ArbeitsStapel, int wieviele) {
if (wieviele == 1) { 1
cout << "Bewege Scheibe von "<< StartStapel << " nach " << ZielStapel << endl;
return;
}
Bewege(StartStapel, ArbeitsStapel, ZielStapel, wieviele-1); 2
Bewege(StartStapel, ZielStapel, ArbeitsStapel, 1);
Bewege(ArbeitsStapel, ZielStapel, StartStapel, wieviele-1); 3
}
4
Rekursive Lösung: Türme von Hanoi