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.