Rekursiv vs iterativ

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

Faculty2.om
PROCEDURE Faculty(n: INTEGER) : INTEGER;
   VAR
      result: INTEGER;
BEGIN
   result := 1;
   WHILE n > 0 DO
      result := result * n; DEC(n);
   END;
   RETURN result
END Faculty;

*Viele Probleme lassen sich mindestens genauso elegant und deutlich effizienter auch iterativ lösen.
 
*Dies gilt insbesondere in Fällen von tail recursion, die sofort durch eine Schleife ersetzt werden können, da kein ``verschachtelter Zustand'' existiert, der durch eine Rekursion repräsentiert werden müßte.
 
*Bei einer tail recursion erfolgt der rekursive Aufruf (wenn überhaupt) nur ganz am Schluß:
 
PROCEDURE TailRecursion(...);
BEGIN
   IF (* einfacher Fall *) THEN
      (* ... *)
   ELSE
      (* ... *)
      TailRecursion(...);
   END;
END TailRecursion;

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999 Andreas Borchert, in HTML konvertiert am 29.06.1999