03.11.2013 Aufrufe

SMALLTALK K1ex127-.45ex51275ahler/Bothner

SMALLTALK K1ex127-.45ex51275ahler/Bothner

SMALLTALK K1ex127-.45ex51275ahler/Bothner

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

310 15 Programmierung von Suchverfahren<br />

Der Begriff der “rekursiven” Methode<br />

Eine Methode, deren Selektor im eigenen Methodenrumpf innerhalb einer Anforderung<br />

auftritt, nennt man eine rekursive Methode.<br />

Charakteristisch für die Ausführung einer rekursiven Methode ist es, daß immer die<br />

gleichen Anforderungen – jedoch mit unterschiedlichen Werten in den Argumenten<br />

der Methode – ausgeführt werden.<br />

Damit gesichert ist, daß dieser Prozeß zu irgendeinem Zeitpunkt abbricht, muß<br />

innerhalb einer rekursiven Methode mindestens ein Abbruchkriterium enthalten sein.<br />

Im Normalfall wird das Abbruchkriterium als erste Anforderung innerhalb der Methode<br />

angegeben, so daß es vor einem weiteren rekursiven Methodenaufruf derselben<br />

Methode ausgeführt und somit geprüft werden muß.<br />

Hinweis: Da bei jedem rekursiven Aufruf ein Methodenexemplar im Hauptspeicher eingerichtet<br />

wird, kann es vorkommen, daß der Speicherplatz nicht ausreicht. Das <strong>SMALLTALK</strong>-<br />

System eröffnet in diesem Fall ein Walkback-Fenster (siehe Anhang A.3), das die Titel-Zeile<br />

Smalltalk Express stack overflow<br />

enthält.<br />

Rekursive Lösung von PROB-11<br />

Um PROB-11 durch den Einsatz einer rekursiven Methode lösen zu können, werden<br />

wir die in der ursprünglichen iterativen Lösung verwendeten Methoden “verbindung-<br />

Iter:” und “verbindung:iter:” wie folgt durch die Methode “verbindungRek:” und<br />

die rekursive Methode “verbindung:rek:” ersetzen:<br />

verbindungRek:<br />

Bilde den Nachfolger−Sammler, der nur den Abfahrtsort enthält<br />

verbindung:rek:<br />

verbindung:rek:<br />

Nachfolger−Sammler ist leer?<br />

true<br />

false<br />

"keine<br />

Ankunftsort ist im Nachfolger−<br />

IC−Verb" true Sammler enthalten?<br />

false<br />

"IC−Verb<br />

existiert"<br />

verbindung: (self alleNachfolger: nachfolgerSammler) rek: ankunft<br />

alleNachfolger:<br />

Ersetze sämtliche Objekte des Nachfolger−Sammlers durch ihre direkten Nachfolger<br />

Abbildung 15.6: Struktogramme für die rekursive Lösung von PROB-11<br />

Die ersten beiden Struktogramme setzen wir durch die Vereinbarung der Methode<br />

“verbindungRek:” in der Form<br />

verbindungRek: ankunft<br />

| nachfolgerSammler |<br />

nachfolgerSammler := OrderedCollection new.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!