CG@CPPBLOG

/*=========================================*/
随笔 - 76, 文章 - 39, 评论 - 137, 引用 - 0
数据加载中……

我的SICP习题答案(1.16~1.19)

1.16
(define (fast-expt x n)
  (fast-expt-iter x n 
1))

(define (fast-expt-iter x n a)
  (cond ((
= n 0) a)
        ((even? n) (fast-expt-iter (square x) 
                                   (/ n 
2)
                                   a))
        (else (fast-expt-iter x 
                              (- n 
1)
                              (* a x)))))

1.17
(define (multi x y)
  (if (
= y 0)
      
0
      (+ x (multi x (- y 
1)))))

(define (fast-multi x y)
  (cond ((
= y 00)
        ((even? y) (double (fast-multi x
                               (half y))))
        (else (+ x (fast-multi x (- y 
1))))))

(define (double x) (+ x x))
(define (half y) (/ y 
2))

1.18
(define (double x) (+ x x))
(define (half y) (/ y 
2))

(define (fast-multi x y)
  (fast-multi-iter x y 
0))

(define (fast-multi-iter x y p)
  (cond ((
= y 0) p)
        ((even? y) (fast-multi-iter (double x)
                                    (half y)
                                    p))
        (else (fast-multi-iter x (- y 
1) (+ p x)))))

1.19
;T(pq):(a,b)=>(bq+aq+ap, bp+aq)
;
T(pq):(bq+aq+ap, bp+aq)=>((bp+aq)q + (bq+aq+ap)q + (bq+aq+ap)p,
;
                          (bp+aq)p + (bq+aq+ap)q)
;
      => (2bpq+2aqq+bqq+2apq+app, bpp+2apq+bqq+aqq)
;
      => (b(2pq+qq)+a(2pq+qq)+a(qq+pp), b(qq+pp)+a(2pq+qq))
;
q' = 2pq+qq
;
p' = qq+pp
;
(define (fib n)
  (fib-iter 
1 0 0 1 n))

(define (fib-iter a b p q count)
  (cond ((
= count 0) b)
        ((even? count) 
         (fib-iter a
                   b
                   (+ (* p p) (* q q))
                   (+ (* 
2 p q ) (* q q))
                   (/ count 
2)))
        (else (fib-iter (+ (* b q) (* a q) (* a p))
                        (+ (* b p) (* a q))
                        p
                        q
                        (- count 
1)))))


posted on 2008-03-27 00:53 cuigang 阅读(814) 评论(1)  编辑 收藏 引用 所属分类: Lisp/Scheme我的SICP答案

评论

# re: 我的SICP习题答案(1.16~1.19)[未登录]  回复  更多评论   

good~
2008-07-19 10:21 | sun

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理