Es gibt allerdings immer die Möglichkeit, die
Endrekursion zu vermeiden.
Beispiel:
Delphi-Quellcode:
procedure MachwasRekursiv(parameter);
begin
BerechneSchritt1;
if rekusionsbedingung then
MachwasRekursiv(neueparameter);
end;
dies kann so übersetzt werden:
Delphi-Quellcode:
procedure MachwasIterativ(parameter);
begin
repeat
BerechneSchritt1;
parameter := neueparameter;
until not rekusionsbedingung;
end;
Bei der Beseitigung der Endrekursion setzt man also einfach die (Funktions-)Parameter auf die neuen Wert und steigt in der Funktion oben wieder ein.
Hier ist durchaus der GOTO-Befehl erlaubt, da er unnötiges Zuweisen der neuen Parameter vermeidet.
Delphi-Quellcode:
procedure MachwasIterativ(parameter);
Label start;
begin
start:
BerechneSchritt1;
if rekursionsbedingung then
begin
parameter := neueparameter;
Goto Start;
end;
end;
Wenn es sich nicht um eine Endrekursion handelt, kann dieses Verfahren nicht funktionieren:
Delphi-Quellcode:
procedure MachwasRekursiv(parameter);
begin
BerechneSchritt1;
if rekusionsbedingung then
MachwasRekursiv(neueparameter);
BerechneSchritt2; // wegen dieser Anweisung liegt KEINE Endrekursion vor
end;