t3x.org / sketchy / library / factorial.html
SketchyLISP
Reference
  Copyright (C) 2007
Nils M Holm

factorial

Conformance: SketchyLISP Extension

Purpose: Compute the factorial of a number. This procedure uses the "recursive product" algorithm. The argument must be a positive integer.
 
The algorithm (in Java) was found under "factorial functions" at http://www.luschny.de/math/

Arguments:
N - number

Model:

(define (factorial n) 
  (cond ((zero? n) 1)
    (#t (* n (factorial (- n 1))))))

Implementation:

(define (factorial n)
  (letrec
    ((r*
       (lambda (n k)
         (cond ((< k 2) n)
           (else (let ((l (quotient k 2)))
                   (* (r* n l)
                      (r* (+ n l) (- k l)))))))))
    (cond ((negative? n)
        (bottom (list 'factorial n)))
      (else (r* 1 n)))))

Example:

(factorial 5) 
=> 120

See also:
permute, product.