21.11.2013 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!