(define factorial
(lambda (n)
(factorial-product 1 n)))
(define factorial-product
(lambda (a b) ; compute a × b!
(if (= b 0) ; as (a × b) × (b-1)!
a
(factorial-product (* a b) (- b 1)))))
factorial correctly computes the factorial of n if factorial-product
correctly computes a × b!
This quantity is also an invariant. Example:
1 × 5! = 120
(1 × 5) × 4! = 120
(5 × 4) × 3! = 120
(20 × 3) × 2! = 120
(60 × 2) × 1! = 120
(120 × 1) × 0! = 120