1.31

练习 1.31

a) 过程sum是可以用高阶过程表示的大量类似抽象中最简单的一个。请写出一个类似的称为product的过程,它返回在给定范围中各点的某个函数值的乘积。请说明如何用product定义factorial。另请按照下面公式计算π\pi的近似值:

π4=244668...335577... \frac{\pi}{4} = \frac{2\cdot 4\cdot 4\cdot 6\cdot 6\cdot 8...}{3\cdot 3\cdot 5\cdot 5\cdot 7\cdot 7...}

b) 如果你的product过程生成的是一个递归计算过程,那么请写出一个生成迭代计算过程的过程。如果它生成一个迭代计算过程,请写一个生成递归计算过程的过程。

a) 迭代实现:

(define (product term a next b) (define (iter a result) (if (> a b) result (iter (next a) (* result (term a))))) (iter a 1)) (define (identity x) x) (define (inc n) (+ n 1)) (define (factorial n) (product identity 1 inc n)) (factorial 10) (define (pi-product a b) (define (pi-term a) (/ (* a (+ a 2)) (* (+ a 1) (+ a 1)))) (define (pi-next a) (+ a 2)) (product pi-term a pi-next b)) (* 4 (pi-product 2 1000))

b) 递归实现:

(define (product term a next b) (if (> a b) 1 (* (term a) (product term (next a) next b)))) (define (identity x) x) (define (inc n) (+ n 1)) (define (factorial n) (product identity 1 inc n)) (factorial 10)

results matching ""

    No results matching ""