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