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 ...
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)