Nur mal zum Verständnis ein Beispiel für Rekursion:
Delphi-Quellcode:
procedure SubOdInfo(WC, ExcludeWC: TWinControl; CtrlOd: Tod;
var Deep: Integer);
// diese Funktion ruft sich evtl. selbst wieder auf
var
I: Integer;
SC: TControl;
SWC: TWinControl;
function DataSetInfoOd(C: TComponent; CtrlOd: Tod): Boolean;
begin
Result := False;
...
end;
begin
Inc(Deep);
if (WC = ExcludeWC)
or not DataSetInfoOd(WC, CtrlOd)
then
begin
I := 0;
while I <= WC.ControlCount - 1
do
begin
SC := WC.Controls[I];
if SC
is TWinControl
then
begin
SWC := (SC
as TWinControl);
SubOdInfo(SWC, ExcludeWC, CtrlOd, Deep);
// hier rekursiver Aufruf
end;
Inc(I);
end;
end;
Dec(Deep);
end;
Eine Funktion ruft sich bei Rekursion selbst wieder auf.
Man hat dadurch mehrere Ebenen (hier in Deep nachvollziehbar) der Aufrufe, die dann wieder rückläufig verlassen werden.
Das kann nützlich sein, wenn man bei einem durch eine Funktion gefundenen Ergebnis die gleiche Aktion wieder durchführen will.
Jeder Durchgang hat seine eignen lokalen Variablen (z.B. I: Integer), die nach Beendigung des Durchlaufs wieder freigegeben werden.
Wurden 100 Rekursionen ausgeführt wurde Deep bis 100 gezählt und wieder zurück und es wurden 100 mal die Variable I erzeugt und wieder freigegeben.