is-Logo Karel D. Robot
Rekursion - Automatische Robotersteuerung

S. Spolwig
2.5

[ Karel ]
Startseite

Ziele:
Rekursion als Wiederholung durch Schachtelung und als Konstrukt für Aktionen, die mehrfach wiederholt werden, obwohl es keine Schleife ist.

Informationen
zur Vertiefung

 

Situation

Wie vorher. RD1 soll von C,1 geradeaus gehen bis er einen Baum gefunden hat.

3. Wiederholung durch Rekursion

Allgemein ausgedrückt
 
Übersetzt in die Programmiersprache
 
Suchen
  wenn Du einen Baum gefunden hast
  dann bist du fertig
  sonst
     gehe 1 Vor
     Suchen (das ganze noch mal von vorne)

 

procedure BaumSuchen;
begin
  if NOT RD1.VorneFrei
  then // tue nichts mehr
  else
    begin
      RD1.Vor;
      BaumSuchen;
    end;
end;

Bei einer direkten Rekursion ruft sich die Prozedur selbst auf. Das kann eine Endlosschleife werden, wenn die Abbruchbedingung nicht erfüllt wird. Deshalb gelten Rekursionen zwar als elegant und oft als effizient, aber auch als gefährlich.
(Dieses Beispiel ist gefährlich! Unter welchen Umständen?)

3. Aufgabe
    Schreiben Sie eine neue Prozedur BaumSuchen

a) Deklarieren Sie procedure BaumSuchen;

b) Schreiben den Code

procedure TControlFrm.BaumSuchen;
  // -------------------------------------------------------------
  begin
    if NOT RD1.VorneFrei // er hat was gefunden
    then // tue nichts mehr
    else
      begin
        RD1.Vor;
        BaumSuchen; // die ganze Sache wieder von vorne
      end;
  end;

 

c) Rufen Sie die Prozedur im Testbutton auf.

Starten und testen!
 

Merke: Am Anfang muß eine erfüllbare Abbruchbedingung stehen,
sonst ruft sich die Prozedur endlos auf bis der Arbeitsspeicher nicht mehr ausreicht und der Computer abstürzt.

 

 

Algorithmen II

 

©  05. Oktober 2008    Siegfried Spolwig

page_top next page