(define (cuigang) (coding))

(define (coding) (coding))

我的SICP习题答案(1.20)

1.20
下面用 % 表示过程 remainder,那么正则序的过程如下:
 (gcd 206 40)
 (if (
= 40 0206 (gcd 40 (% 206 40)))
 (gcd 
40 (% 206 40))
 (if (
= (% 206 400;<##  1> [6]
     40 
     (gcd (% 
206 40) (% 40 (% 206 40))
 (gcd (% 
206 40) (% 40 (% 206 40)))
 (if (
= (% 40 (% 206 40)) 0)   ;<##  2> [4]
     (% 206 40)
     (gcd (% 
40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))
 (gcd (% 
40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))
 (if (
= (% (% 206 40) (% 40 (% 206 40))) 0;<## 4>[2]
     (% 40 (% 206 40))
     (gcd (% (% 
206 40) (% 40 (% 206 40)))
          (% (% 
40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))
 (gcd (% (% 
206 40) (% 40 (% 206 40)))
      (% (% 
40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))
 (if (
= (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) 0;<## 7>[0]
     (% (% 206 40) (% 40 (% 206 40)))
     (gcd ...)
 (% (% 
206 40) (% 40 (% 206 40)))  ;<## 4>[2]

可以看出需要调用 remainder 共 1+2+4+7+4 = 18 次。

应用序计算过程如下:
(gcd 206 40)
(if (
= 40 0206 (gcd 40 (% 206 40))) ;<##>
(gcd 40 6)
(if (
= 6 040 (gcd 6 (% 40 6)))      ;<##>
(gcd 6 4)
(if (
= 4 06 (gcd 4 (% 6 4)))        ;<##>
(gcd 4 2)
(if (
= 2 04 (gcd 2 (% 4 2)))        ;<##>
(gcd 2 0)
(if (
= 0 02 (gcd 0 (% 2 0)))
2

可以看出共需 4 次。


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


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]