zurück nächste

endrekursiv Ablauf


 

Bindung von n Bindung von akku Aufruf nächste Stufe
5 1 (loop 4 5)

Der besondere Unterschied zur normal rekursiven Version besteht in Scheme besonders in den Aufrufebenen. Bei einem endrekursiven Aufruf wird bei Scheme keine neue Ebene aufgebaut und damit auch kein neuer Speicherplatz auf dem Aufrufstack belegt. Das ist auch nicht notwendig, da ...

  1. kein Rücksprung erfolgt, da keine weiteren Schritte auszuführen sind
  2. alle Parameter bekannt sind für die nächste Auswertungsstufe

Daher ersetzt das Ergebnis des neuen Funktionsaufrufes einfach den vorigen !

;;; endrekursiv mit lokaler Schleife:
(define
  (fac n)
  (let loop
    ((n n)
     (akku 1))
    (if
     (zero? n)
     akku
     (loop (sub1 n) (* n akku)))))

;;; Test:
(fac 5)