【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 (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-23 10:21:10

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

js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];

var arrange = function(arr){ var result = [], temp = []; arr.sort(function(source, dest){ return source - dest; }).concat(Infinity).reduce(function(source, dest){ temp.push(source); if(dest-source>1){ result.push(temp); temp = []; } return dest; });

SICP 1.14 1.15

解: 1.14:空间是O(n).步聚不好直接求,根据书中的描述,增长的阶是对某种规模所需资源的粗略度量,比如书中描述斐波那契的树形递归计算需要O(pow((1+sqrt(5))/2,n))步,可以把这个树形递归想像成是一个满二叉树,那么斐波那契的树形递归计算可以近似为O(pow(2,n)).同理,计算硬币组合种类也可以看成是一个满二叉树,树的高度与n有关(最右子树最深),那么步骤数为O(pow(2,n)) 1.15:5次.0.1=x/pow(3,n) 得n=log(3,10*x),调用结束则计算

老李说事:下课:北京时间2015年10月14日23:20

你能想象一个培训机构的下课时间是23点么?现在是北京时间23:20.学员们辛苦了,基本上天天都这么晚.在将来回忆起这一刻的,我想是甜蜜的

Microsoft.VisualStudio.Shell.14.0.dll 文件位置

1 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Platform\Shell\Microsoft.VisualStudio.Shell.UI.Internal.StatusBar.imagemanifest" 2 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensio

求数组中两两相加等于20的组合(Python实现)

题目 求数组中两两相加等于20的组合. 例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20. 解析 分为两个步骤: 先采用堆排序或快速排序对数组进行排序,时间复杂度为O(nlogn). 然后对排序的数组分别从前到后和从后到前进行遍历, 时间复杂度为O(n). 假设从前到后遍历的下标为begin,从后到前遍历的下标为end. 当arr[begin] + arr[end] < 20时,满足条件的数一定在[begin+1, en

【2019.8.14】2019QB学堂DP图论班第一次考试 Problem C

Problem C Problem Description Tarzan 非常烦数轴因为数轴上的题总是难度非常大.不过他非常喜欢线段,因为有关线 段的题总是不难,讽刺的是在一个数轴上有 n 个线段,Tarzan 希望自己喜欢的东西和讨厌的 东西不在一起,所以他要把这些线段分多次带走,每一次带走一组,最多能带走 k 次.其实 就是要把这些线段分成至多 k 组,每次带走一组,问题远没有那么简单,tarzan 还希望每次 选择的线段组都很有相似性,我们定义一组线段的相似性是组内线段交集的长度,我们现在

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,

python 列表生成式

列表特性:列表是一次性生成的 a = [1,2,3,4,5,6,7,8,9] 或 [ i*2 for i in range(10)]  ###--->列表生成式 ===[2,4,6,8,10,12,14,16,18,20]=== 两个列表的区别: 1列表是写死的,2列表可以里面做一些操作把相应的东西输出出来 列表生成式目的是为了使代码更简洁,且可以实现更复杂的功能,如将i的值传至函数中 [fun(i)  for i in range(10)] 生成式:通过生成式可以直接创建一个列表,但受内存大小

【直播预告】云栖直播:阿里热修复产品HotFix2.0升级详解

全面--你知道吗?1891年,卡尔森纳做出的第一把瑞士军刀,只有螺丝刀和开罐器.经过一代又一代能工巧匠的打磨,这把刀陆续增加了锯子.剪刀.镊子.放大镜.改锥,甚至内藏激光.LED手电筒.USB记忆碟等功能. 稳定--你知道吗?公元前1500多年前,埃及人就已经用绳子和竖棍做成了简易天平,成为现代天平的雏型.天平是平衡的象征,托盘内不断增加的砝码,更是自信与质量的保障. 精准--你知道吗?1608年,荷兰眼镜商汉斯·利伯希用两块镜片发明了人类历史上第一架望远镜,随着技术的发展,大千世界在人类的探索