Skip to content

1.31.b

; If your `product` procedure generates a recursive 
; process, write one that generates an iterative process. 
; If it generates an iterative process, write one that 
; generates a recursive process.

; Iterative version of `product`
(define (product term a next b)
    (define (iter a result)
        (if (> a b) result
            (iter (next a) (* result (term a)))))
    (iter a 1)
)

(define (factorial n)
    (define (f x) x)
    (define (next x) (+ x 1))
    (product f 1 next n))

(factorial 0) ;Value: 1
(factorial 1) ;Value: 1
(factorial 2) ;Value: 2
(factorial 5) ;Value: 120