灯下 登录
计算机科学 / SICP / 1.3.3 Procedures as General Methods

Exercise 1.37 · 习题

Exercise 1.37:

An infinite
continued fraction is an expression of the form

f

=

N
1

D
1

+

N
2

D
2

+

N
3

D
3

+

.

As an example, one can show that the infinite continued fraction expansion with
the N
i and the D
i all equal to 1 produces 1

/

φ, where
φ is the golden ratio (described in 1.2.2). One way to
approximate an infinite continued fraction is to truncate the expansion after a
given number of terms. Such a truncation—a so-called
finite continued fraction
k-term
finite continued fraction—has the form

N
1

D
1

+

N
2


+

N
k

D
k

.

Suppose that n and d are procedures of one argument (the term
index i) that return the N
i and D
i of the terms of the
continued fraction. Define a procedure cont-frac such that evaluating
(cont-frac n d k) computes the value of the k-term finite continued
fraction. Check your procedure by approximating 1

/

φ using

(cont-frac (lambda (i) 1.0)
(lambda (i) 1.0)
k)

for successive values of k. How large must you make k in order
to get an approximation that is accurate to 4 decimal places?

If your cont-frac 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.

练习 1.37:无穷连分式是形如

f = N₁ / (D₁ + N₂ / (D₂ + N₃ / (D₃ + …)))

的表达式。举例来说,可以证明:当所有 Nᵢ 和 Dᵢ 均等于 1 时,无穷连分式展开的值为 1/φ,其中 φ 是黄金比例(见 1.2.2 节)。近似无穷连分式的一种方法是在给定项数处截断展开式。这种截断——称为 k 项有限连分式——的形式为

N₁ / (D₁ + N₂ / (⋱ + Nₖ / Dₖ))

设 n 和 d 是以项索引 i 为参数的过程,分别返回连分式各项的 Nᵢ 和 Dᵢ。定义过程 cont-frac,使得求值 (cont-frac n d k) 能计算 k 项有限连分式的值。通过对逐个 k 值求值

(cont-frac (lambda (i) 1.0)
(lambda (i) 1.0)
k)

来近似 1/φ,检验你的过程。k 至少要取多大,才能使近似值精确到 4 位小数?

若你的 cont-frac 过程产生递归型计算过程,请再写一个产生迭代型计算过程的版本;若它产生迭代型计算过程,请再写一个产生递归型计算过程的版本。