【SICP练习】7 练习1.20

练习1.20

这道题要求我们分别在正则序和应用序的情况下来研究书中的gcd函数,并且还要算出实际执行remainder运算的次数。

题目中先问的正则序后问的应用序,但由于应用序比较简单,我们先来看看应用序:

(gcd 206 40)

(gcd 40 6)

(gcd 6 4)

(gcd 4 2)

(gcd 2 0)

2

因此(gcd 206 40)共调用了5次remainder函数。

再来看看正则序的情况:

(gcd 206 40)

(gcd 40 (remainder 206 40))

(gcd (remainder 206 40) (remainder 40 (remainder (206 40))))

(gcd (remainder 40 (remainder (206 40))) (remainder (remainder 206 40) (remainder 40 (remainder (206 40)))))

(gcd (remainder (remainder 206 40) (remainder 40 (remainder (206 40))))) (remainder (remainder 40 (remainder (206 40))) (remainder (remainder 206 40) (remainder 40 (remainder (206 40))))))

到这里就相当于参数是2和0了,在这里我已经将if去掉了,至于remainder调用多少次数数便知道了。

时间: 2024-10-03 20:22:48

【SICP练习】7 练习1.20的相关文章

u近一年很变态个v分

http://ypk.39.net/search/all?k=%20%CA%AF%CA%A8%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%BA%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7%A8L http://ypk.39.net/search/all?k=%A1%FD%CF%C9%D3%CE%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%

SICP 习题 (2.20)解题总结: 不确定数量参数

SICP 习题 2.20 引入了一种新的函数调用方式,就是带 . 符号的不确定参数调用方式. 题中也讲到了, Scheme支持这种调用方式,如果我们把方法定义成下面这个样子 (define (my-method first-p . others-p) ;-.. ) 我们就可以在调用方法my-method时传入大于2的任何数量的参数,比如: (my-method 1 2 3 4 5 6) 这时my-method获得两个变量,first-p是1,而others-p是一个list,成员有2 3 4 5

SICP 1.20体会

1.20 主要是让大家体会两种运算序的差别的. 网上找了一些答案,都是死展开的. 大家是搞IT的, 死展开就不搞IT的做法. 先考虑应用序列 我们得到 gcd(206, 40) -> gcd(40, 6) -> gcd(6, 4) -> gcd(4,2)->gcd(2,0)  总共4次递归调用,每次递归做一次取余数运算. 那么, 正则序列怎么知道呢? 一种办法是完全按步骤做法, 这是计算机思维. 搞IT的就要换数学思维. 先看看规律, 206-> 40-> 6->

【SICP练习】14 练习1.20

练习1.20 这道题要求我们分别在正则序和应用序的情况下来研究书中的gcd函数,并且还要算出实际执行remainder运算的次数. 题目中先问的正则序后问的应用序,但由于应用序比较简单,我们先来看看应用序: (gcd 206 40) (gcd 40 6) (gcd 6 4) (gcd 4 2) (gcd 2 0) 2 因此(gcd 206 40)共调用了5次remainder函数. 再来看看正则序的情况: (gcd 206 40) (gcd 40 (remainder 206 40)) (gcd

SICP 习题 (2.19) 解题总结:重写零钱兑换程序

SICP 习题2.19 要求我们重新设计1.2.2节的零钱兑换程序,要求我们可以轻易改变程序里用的兑换币种. 我们先看看1.2.2节的零钱兑换程序,代码是这样的: (define (RMB-Change amount) (format #t "Changing ~S~%" amount) (cond ((= amount 0) 0) ((< amount 0) 0) (else (RMB-Change-Recursive amount 1 '() )))) (define (RM

关于SICP 1.2.2节中的换零钱方式的统计研究及其迭代实现。

关于SICP 1.2.2节中的换零钱方式的统计研究及其迭代实现 最近开始看sicp(计算机程序的构造和解释)一书,此书竟然是mit的计算机入门教材,不得不令人感叹天朝大学教育与真正一流大学的差距之大..我们在学习c语言的时候,人家已经开始学习剥离具体语言之外的编程思想了..扯远了,说回正题 sicp在1.2.2节中提到了一个有意思的换零钱实例: 将1美元(100美分)换成半美元,1/4美元,10美分,5美分,1美分的零钱,一共有多少种换法? 初看感觉有点无从下手,脑子里想的是各种排列组合,一片混

资源向导之 &quot;SICP&quot;

Structure and interpretation of computer programs PDF 英文版本的书籍:https://github.com/penguiner/sicp-pdf 中文翻译过来自行搜索吧,一大把 不过这里给出中文版的勘误. 译者很有责任心! http://www.math.pku.edu.cn/teachers/qiuzy/books/sicp/errata.htm 豆瓣上面我一篇比较喜欢的书评: http://book.douban.com/review/4

SICP 找零钱问题背后的思考

问题见SICP P26 此问题的递归方法很简单,类似于背包的思想. 即金额为amount的现金换成n种硬币的种类数 满足循环不变式: count_change(amount,n)=count_change(amount,n-1)+count_change(amount-amount_of_first_coin,n) 递归中止条件是:当a=0,结果为1 a<0,结果为0 当n=0 结果也为0 将上述规则转换为scheme代码,在Drracket中运行 1 #lang racket 2 (defin

20、oracle用户管理恢复

下面会一一讲解控制文件.redo文件及非归档模式.归档模式数据文件丢失的情况下,如何恢复数据? (1)控制文件(controlfile)丢失 在做恢复实验之前,先备份好数据. 案例1.模拟一个控制文件丢失 select name from v$controlfile; SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------