庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

sicp 习题1.37,1.38解答

Posted on 2007-05-17 11:34 dennis 阅读(698) 评论(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 11)
        ((
= i 22)
        ((
= (remainder (- i 230) (/ (* 2 (+ i 1)) 3))
        (
else
           
1)))
 
   据此求出e:
(+ 2 (cont-frace (lambda(i) 1.0) d 1000))



只有注册用户登录后才能发表评论。


网站导航: