**AP Computer Science Quiz** (Relax, it's just a quiz.)

1. The function, `factorial`, as written below, is a recursive process.

(define (factorial n) (cond ((or (= n 1) (= n 0)) 1) (else (* n (factorial (- n 1))))))

It is a recursive process because of the space it takes up when invoked.
Consider `(factorial 4)`:

(factorial 4) (* 4 (factorial 3)) (* 4 (* 3 (factorial 2))) (* 4 (* 3 (* 2 (factorial 1)))) (* 4 (* 3 (* 2 1))) (* 4 (* 3 2)) (* 4 6) 24

Write a different version of `factorial` that uses an iterative process.
`factorial` should still be called the same way (eg., `(factorial 4)`), so
you will need to write a helper function that has one more variable.

2. Here is a definition of accumulate:

(define (accumulate combiner null-value term a next b) (cond ((> a b) null-value) (else (combiner (term a) (accumulate combiner null-value term (next a) next b)))))

Write `factorial` in terms of `accumulate`. Here's a skeleton of part of what your answer *must* look like:

(define (factorial n) (accumulate <??> <??> <??> <??> <??> <??>))

You have to fill in the `<??>`s. Any attempt to write factorial as a recursive procedure will earn a score of zero.