To compute the product of the integers 1 to k using the divide and conquer approach, we have, as in Section 2.1, two cases.
When there are no integers to be multiplied, the result should be one.
When there are k (k>0)
integers, the solution
may be written as k*factorial(k-1)
.
Following are the Scheme and J programs for computing the product of the integers 1 to k.
(define factorial (lambda(n) (if (= n 0) 1 (* n (factorial (- n 1))))))
Program factorial
(Scheme Version)
factorial =: monad define script if. y. = 0 do. 1 else. y. * factorial y. - 1 end. )
Program factorial
(J Version)
As in Section 2.1, we can trace the execution of
factorial
.
> (trace factorial) #<unspecified> > (factorial 6) "CALLED" factorial 6 "CALLED" factorial 5 "CALLED" factorial 4 "CALLED" factorial 3 "CALLED" factorial 2 "CALLED" factorial 1 "CALLED" factorial 0 "RETURNED" factorial 1 "RETURNED" factorial 1 "RETURNED" factorial 2 "RETURNED" factorial 6 "RETURNED" factorial 24 "RETURNED" factorial 120 "RETURNED" factorial 720 720