Posted on 2007-05-17 11:34
dennis 阅读(715)
评论(0) 编辑 收藏 所属分类:
计算机科学与基础
搞定了工作,继续做习题:)
题1.37:无穷连分式的过程描述,我发现这道题用迭代比递归反而更容易写出来,递归不是那么显而易见。
递归版本:
(define (cont-frace n d k)
(if (= k 1)
(/ (n 1) (d 1))
(/ (n k) (+ (d k) (cont-frace n d (- k 1))))))
再看迭代版本:
(define (cont-frace-iter n d result counter k)
(if (= counter 0)
result
(cont-frace-iter n d (/ (n counter) (+ (d counter) result)) (- counter 1) k)))
(define (cont-frace n d k)
(cont-frace-iter n d 0 k k))
当n d的过程都是(lambda (x) 1.0)时,趋近于1/φ(黄金分割比的倒数),通过计算可得知,当k>=11时,满足十进制的4位精度。
题1.38在1.37的基础上,关键在于写出d过程,通过观察给出的序列可以发现,当i-2是3的倍数时,(d i)应该返回2(i+1)/3,由此先写出d过程:
(define (d i)
(cond ((= i 1) 1)
((= i 2) 2)
((= (remainder (- i 2) 3) 0) (/ (* 2 (+ i 1)) 3))
(else
1)))
据此求出e:
(+ 2 (cont-frace (lambda(i) 1.0) d 1000))