Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
25.1 Turm von Hanoi<br />
E<strong>in</strong> schönes Beispiel für <strong>die</strong> Anwendung der Rekursion ist das Problem vom Turm von Hanoi:<br />
Es soll e<strong>in</strong> Stapel von immer kle<strong>in</strong>er werdenden Scheiben von e<strong>in</strong>em Platz auf e<strong>in</strong>en anderen Platz<br />
verschoben werden. Dazu steht e<strong>in</strong> weiterer Platz als Zwischenablage zur Verfügung. Die Scheiben<br />
dürfen nur auf e<strong>in</strong>em der drei Plätze abgelegt werden, es darf immer nur e<strong>in</strong>e Scheibe auf e<strong>in</strong>mal<br />
verschoben werden <strong>und</strong> es darf nie e<strong>in</strong>e grössere Scheibe auf e<strong>in</strong>er kle<strong>in</strong>eren zu liegen kommen. Zu<br />
Beg<strong>in</strong>n steht der Turm auf dem l<strong>in</strong>ken Platz, am Ende soll er auf dem rechten Platz stehen.<br />
Das Problem lässt sich elegant rekursiv Formulieren:<br />
Um den Turm der Höhe n auf das rechte Feld zu bekommen, muss zuerst der Teilturm<br />
aus den oberen (n-1) Scheiben <strong>in</strong> <strong>die</strong> Mitte plaziert werden, dann <strong>die</strong> unterste Scheibe<br />
auf den rechten Platz verschoben werden <strong>und</strong> anschliessend wird der Teilturm von der<br />
Mitte auch auf den rechten Platz verschoben.<br />
Das bedeutet, um e<strong>in</strong>en Turm der Höhe n zu verschieben, müssen wir zweimal e<strong>in</strong>en Turm der Höhe<br />
(n-1) <strong>und</strong> e<strong>in</strong>mal e<strong>in</strong>e Scheibe verschieben. Das Verschieben e<strong>in</strong>es Teilturmes kann für sich alle<strong>in</strong>e<br />
wie das Verschieben des ganzen Turms betrachtet werden <strong>und</strong> deshalb auch mit der oben beschriebenen<br />
Methode behandelt werden, ausser <strong>die</strong> Höhe des Teilturms ist 0, aber das Verschieben<br />
e<strong>in</strong>es Turmes der Höhe 0 ist trivial, es muss schlicht nichts gemacht werden.<br />
Diese Vorschrift kann auch von menschlichen Spielern zum Lösen des Problems benutzt werden.<br />
25.2 Weitere E<strong>in</strong>satzgebiete für Rekursionen<br />
E<strong>in</strong>ige Beispiele zum E<strong>in</strong>satz von Rekursion s<strong>in</strong>d:<br />
Lexikalische Analysen (Parser, lesen <strong>und</strong> umsetzen von mathematischen Formeln oder auch<br />
Programmen, z. B. C-Code bei e<strong>in</strong>em C-Compiler),<br />
Zuggeneratoren bei Spielen wie z. B. Schachprogrammen, bei denen der Computer Zugfolgen<br />
von Spieler <strong>und</strong> Computer bis zu e<strong>in</strong>er gewissen Tiefe durchspielt <strong>und</strong> den besten Zug auswählt.<br />
Wegsuche <strong>in</strong> e<strong>in</strong>em Labyr<strong>in</strong>th <strong>und</strong> andere Backtrack<strong>in</strong>g-Algorithmen. (Bei Backtrack<strong>in</strong>g wird<br />
im Pr<strong>in</strong>zip etwas ausprobiert bis es nicht mehr weitergeht, sodann wird <strong>die</strong> letzte Entscheidung<br />
rückgängig gemacht <strong>und</strong> wieder alles durchprobiert, wenn es immer noch nicht geht <strong>die</strong> zweitletzte<br />
Entscheidung rückgängig gemacht usw. bis das Ziel erreicht ist oder man wieder am Anfang<br />
steht. Am Beispiel Labyr<strong>in</strong>th: Wenn mann <strong>in</strong> e<strong>in</strong>e Sackgasse gelangt ist, geht man zurück<br />
zur letzten Verzweigung <strong>und</strong> wählt e<strong>in</strong>en anderen Weg, wenn alle Wege <strong>die</strong>ser Verzweigung<br />
erfolglos ausprobiert worden s<strong>in</strong>d, geht man zurück zur vorletzten Verzweigung usw.).<br />
Allgeme<strong>in</strong> alle Probleme, welche <strong>in</strong> kle<strong>in</strong>ere, gleichartige Teilprobleme zerlegt werden können<br />
(Wird oft als 'Teile <strong>und</strong> herrsche' bezeichnet.) E<strong>in</strong> Beispiel dafür ist Quicksort.<br />
Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 97/147