vorige nächste

endrekursiv Ablauf


 

Bindung von n Bindung von akku Aufruf nächste Stufe
2 60 (loop 1 120)

Im Prinzip ist das Ergebnis hier bekannt. Es muss nur deswegen noch einmal aufgerufen werden, weil im Programm die Abfrage (zero? n) lautet, um auch den Fall (fac 0) berechnen zu können.
An dieser Stelle sein noch darauf hingewiesen, dass beide Programme keine falschen Eingaben abfangen, was natürlich auch unter Scheme problemlos möglich ist. Siehe Hilfe unter number.

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