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 ""