【SICP练习】4 练习1.11-1.12

练习1.11

这种题目太像是数学题目了,不过拿到编程上又有一些的难度。我们先根据题目中的条件,写出类似于第25页最下面的变换规则。我们先列出如下内容:

a-- f(n-1)  f(2)  f(3)  f(4)  f(5)

b-- f(n-2)  f(1)  f(2)  f(3)  f(4)

c—f(n-3)  f(0)  f(1)  f(2)  f(3)

于是继而得出下式:

a—a+2b+3c

b—a

c—b

于是核心部分已经出来了:

(f-iter (a+2b+3c) a b (- counter 1))

最终写成代码即可:

(define (f n)

(f-iter 1 0 0 n))

(define (f-iter a b c count)

(if (= counter 0)

b

(f-iter (+ a (* 2 b) (* 3 c)) a b (- count 1))))

类比其实是一个很好的学习方法,在博主的【Scheme归纳】3中,通过类比学习了几个很重要的关键字。

练习1.12

这道练习的翻译有误。原文是:Write a procedure that computes elements of Pascal’s triangle by means of a recursive process.正确的翻译应该是计算帕斯卡三角形的各个元素。

y :

0        1

1       1  1

2     1  2  1

3    1  3  3  1

4  1  4  6  4  1

5

x:  0  1  2  3  4

如果用x代表帕斯卡三角形中列的元素的值,y则代表行的元素的值。那么(x,y)上的值等于(x-1,y-1)和(x-1,y)上的元素的和。当y=0,或者x=y时,该处的值为1。

综合以上的两个性质,就可以写出递归版本的pascal函数了:

(define (pascal y x)

(cond ((> x y)   (error ‘unvalid col value”))

((or (= x 0) (= x y)) 1)

(else (+ (pascal (- y 1) (- x 1))

(pascal (- y 1) x)))))

下面我们来检验一下:

(pascal 5 4)

;Value: 5

(pascal 5 3)

;Value: 10

虽然题目中只要求用递归,但作为学习者,不妨也用迭代试试看。更何况在前面的学习中,我们遇到了好几次超过最大递归深度。就像书中的斐波那契一样,带有太多的重复计算。利用刚才的函数,博主测试了一下(pascal 100 49),结果毫无疑问了。

帕斯卡三角形我们在数学中也学过的吧,另外在维基百科中也有相关介绍。除了刚才的计算方法之外还有一种:

(pascal y x)=y!/(x!*(y-x)!)

传说中的什么排版东东我都不太会用,大家将就着看了。

阶乘可以用第22页的注释中的代码:

(define (factorial n)

(define (iter product counter)

(if (> counter n)

product

(iter (* counter product)

(+ counter 1))))

(iter 1 1))

迭代版本的pascal:

(define (pascal y x)

(/  (factorial y)

(* (factorial x)

(factorial (- y x)))))

迭代的好处书中有大篇幅介绍,像什么空间需求。另外计算的值的大小不受递归栈深度的控制。我们再将前文中的100和49两个参数测试一下:

(pascal 100 49)

;Value: 98913082887808032681188722800

即便是用10000和499两个参数也可以算出来,结果大概有110位数,这就是递归和迭代最显而易见的区别了。

下一节的习题因为太难以输入到电脑中,就先搁置了。

时间: 2024-11-08 19:58:17

【SICP练习】4 练习1.11-1.12的相关文章

Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性

Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性 1.1. Jquery1.12  jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.html   2016.11 1.1.1. jQuery.htmlPrefilter()1 1.2. 2016.7  jq3.0 新特性1 1.3. Jq3.1新特性 jQuery 3.1.1 发布了,该版本包括一些 BUG 修复和改进.3 1.1. Jquery1.12  jQuery 2.2 和

eclipse 配置 C++ 11 -- ubuntu 12.04

安装g++ 4.8 sudo apt-get install python-software-properties sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install g++-4.8 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50 最后看看 g++ 的版本号,看是否安装

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例 4.10/4.11/4.12 lvm讲解 lvm讲解 4.10 lvm讲解上 安装下lvm 如果忘记了 lvm包 pvdisplay 查看 4.11 lvm 中 查看物理卷 除了pvdisplay命令还有一个 pvs命令也可以直观查看当前的物理卷 有了物理卷之后再来创建卷组 先用俩个物理卷创建一个卷组 vgcreate vg1 /dev/sdb1 /dev/sdb2 可以查看下卷组vgdiskplay 或者 vgs vgremo

20141112,微软11月12日发布14个安全补丁

大家好,我们是微软大中华区安全支持团队. 微软于北京时间2014年11月12日发布了14个新的安全公告,其中4个为严重等级,8个为重要等级,共修复Microsoft Windows. Internet Explorer (IE). Office. .NET Framework, Internet Information Services (IIS).Remote Desktop Protocol (RDP). Active Directory Federation Services (ADFS)

2014年11月12~11月14日,杨学明老师《软件测试管理》内训在北京某银行软件中心成功举办!

2014年11月12~11月14日,北京天气呈现少有的APEC蓝,著名研发管理专家杨学明老师为某银行提供了三天的内训服务,此次培训由两部分组成,第一部分是<软件测试管理高级实务>.第二部分是<软件测试需求分析和测试设计>,三天的培训非常紧张,包括老师讲解,案例演练,专题研讨,过程衔接非常紧密,课堂气氛也比较轻松,来自该银行核心系统和网银两个事业部的同事参加了此次培训,包括开发,需求,测试和维护人员等,课程结束后,举行了考试,大家对三天的学习进行回顾和总结,并准备把这两天学习到知识结

阅读&lt;构建之法&gt;第三10、11、12章并提出问题

<构建之法>第10.11.12章 第10章: 问题:对我们了解了用户的需求后,但是我们想法和做出来的软件会和用户的需求有偏差,比如风格.界面的修饰等等,那么我们程序猿怎样才能让自己的想法更加靠近用户的想法呢?是设身处境么? 第11章: 问题:我们现在这个阶段是在做四则运算APP,如果按照这章的步骤走下去,每天都要进行进度更新,和每日会议还有每日构建的,会不会不太符合我们现在的处境?毕竟我们的所有时间不能只为一门课程服务,还要大量的时间花在其他的课程上呢. 第12章: 问题:在实际的项目中,我们

写一个块设备驱动11,12

http://blogold.chinaunix.net/u3/108239/showart.php?id=2144635 第11章 +---------------------------------------------------+|                 写一个块设备驱动                  |+---------------------------------------------------+| 作者:赵磊                         

51CTO学院新课发布~~带你遇见更好的自己(四)(2017.11.06-11.12)

hello,各位小仙女(dan).小哥哥(shen)们(dogs),双11已过,想必大家的日常除了等快递已生无可恋.小编姐姐来撒把狗粮在下面,如果你的双11不是酱紫渡过的,而是剁手剁手再剁手,恭喜你的双11很圆满呀~~! 呀呀呀~~!!别走别走~~~!!回来回来,那在等等等的闲工夫上,你也可以给自己充个电嘛,人丑就要多读书这句话总是没错哒,快来看看51CTO为大家准备的第四期新课(11.06-11.12). [精品推荐] 所谓精品推荐,当然是小编姐姐在一百多门新课中,呕心沥血为大家挑选的上等精品

11.10-11.12安装PHP5(上中下);11.13 安装PHP7

扩展: php中mysql,mysqli,mysqlnd,pdo到底是什么 : http://blog.csdn.net/u013785951/article/details/60876816 查看编译参数 : http://ask.apelearn.com/question/1295 ?PHP官网www.php.net ? 当前主流版本为5.6/7.1 先安装httpd再安装php!!! 11.10-11.12安装PHP5(上中下) 1. 进入下载安装包目录: [[email protecte

总结近期CNN模型的发展(一)---- ResNet [1, 2] Wide ResNet [3] ResNeXt [4] DenseNet [5] DPNet [9] NASNet [10] SENet [11] Capsules [12]

总结近期CNN模型的发展(一) from:https://zhuanlan.zhihu.com/p/30746099 余俊 计算机视觉及深度学习 1.前言 好久没有更新专栏了,最近因为项目的原因接触到了PyTorch,感觉打开了深度学习新世界的大门.闲暇之余就用PyTorch训练了最近在图像分类上state-of-the-art的CNN模型,正好在文章中总结如下: ResNet [1, 2] Wide ResNet [3] ResNeXt [4] DenseNet [5] DPNet [9] N