Thema: Delphi Rekursion vs. Iteration

Einzelnen Beitrag anzeigen

Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#82

AW: Rekursion vs. Iteration

  Alt 12. Jun 2010, 16:17
eine unsinnige Fibionacci-Implementierung, wie vom Gammatester süffisant vorgetragen, vermeiden.
Warum unsinnig? Sie orientiert sich lediglich an der rekursiven mathematischen Definition und dürfte wohl all' das, was zugunsten der Rekursion hier ins Felde geführt wurde, wie Übersichtlichkeit und Einfachheit und womöglich einen mathematischen Exaktheitsbeweis im Nacken, in vollem Umfange aufweisen.

Und wenn ich eine iterative Berechnung der Fakultät oder der Fibionacci-Folge sehe, verstehe ich auch nicht, wie man rekursive Lösungen per se bevorzugen kann.
Interessant ist - obwohl ich sie nicht gern zitiere - daß in der Wikipedia für die Endrekursion auch das Synonym „iterativ rekursiv“ benutzt wird. Sie scheint ein merkwürdiges Hybrid-/Übergangswesen zwischen der „klassischen“ / „echten“ Rekursion und der Iteration zu sein. Wer das eine will, muß das andere mögen. Rekursion (teilweise) abzuspecken, führt letztlich (teilweise) wieder zu der hier anscheinend von vielen verpönten Iteration. Doch taugt eine „Rekursion light“ keinesfalls als Nachweis dafür, daß sie vom Laufzeitverhalten her generell mit der Iteration mithalten kann.

Der - auch von mir nicht bezweifelte - tendenzielle Vorteil der Rekursion hinsichtlich Übersichtlichkeit und Wartbarkeit sehe ich bei solchen Quelltexten, die anscheinend die endrekursive Variante verkörpern, wie
Code:
private uint fib(uint n)
        {
            if (n == 0)
                return 0;
            else
                return fib(n, 1, 0);
        }

        private uint fib(uint n, uint x, uint y)
        {
            if (n == 1)
                return x;
            else
                return fib(n - 1, x + y, x);
        }
oder

Code:
function Fibonacci_Rekursiv2(Index : Integer) : Int64;
  function Fibonacci_Rekursiv_Help(f1,f2,n: Integer): Integer;
    begin
      if n = 0 then
        Result:=f1
      else
        Result:=Fibonacci_Rekursiv_Help(f2,f1+f2,n-1);
    end;
begin
  case Index of
    1, 2 : Result := 1;
    else Result := Fibonacci_Rekursiv_Help(0,1,Index);
  end;
end
leider nicht mehr gegeben: Da sich hier nicht an der rekursiven mathematischen Definition vollumfänglich orientiert wird, muß man sich in so etwas - egal, ob als ursprünglicher Programmierer oder später als Sichter des Quelltextes - auch erst einmal genau wie bei Iterationen hineindenken.

Geändert von Delphi-Laie (12. Jun 2010 um 17:14 Uhr)
  Mit Zitat antworten Zitat