【SICP练习】31 练习1.37
练习1.37
根据题目中的意思通过观察得到k项有项连分式的一种表达方式:
f=N1/(D1+(N2/(…+Nk/Dk)))
这个式子可以不断展开,但如果我们把每一个”+”后面的式子记作T(i)。不对,我们应该将每一个N/D记作T(i),因为这组式起始于N/D,且中止与N/D。计N1/D1为T(1),N2/D2为T(2),Nk/Dk为T(k)。在数学上可能不会联想到递归,而是联想到一个表达式,以谋求能够化简。但在这里大家应该都发现了这是一个递归过程。
接着我们来写出题目要求的(cont-fracn d k):
(define (cont-frac n d k)
(define (cont-frac-t i)
(if (= k i)
(/ (n k) (d k))
(/ (n i) (+ (d i) (cont-frac-t (+ i1))))))
(cont-frac-t 1))
下面我们利用题中给出的过程来写一个黄金分割率的定义。
(define(cont-frac-golden-ratio k)
(+ 1 (cont-frac (lambda (i) 1.0)
(lambda (i) 1.0)
k)))
接下来我们按照题中的要去来测试一下刚才所写的过程。
通过几次测试之后得出的结论是当k为11时即有十进制的4位精度,而且k值越大精度越大。
(cont-frac-golden-ratio 11)
;Value: 1.6180555555555556
好了,现在我们还要来考虑迭代版本。我们只要记住迭代的空间需求是不变的,在题中的式子中,我们可以发现如下规律:
T(1)=N1/(D1+T(2))
T(2)=N2/(D2+T(3))
T(3)=N3/(D3+T(4))
……
T(k-2)=N(k-2)/(D(k-2)+T(k-1))
T(k-1)=N(k-1)/(D(k-1)+T(k))
Tk=Nk/Dk
根据如下的表达式的规律,我们可以写出迭代版本的cont-frac函数,像前面博文中所讲,我们依旧应该添加一个存储器,比如other。而不断变化的other就是前面表达式从依次往下的最右边的T。
(define (cont-frac n d k)
(define (cont-frac-t i other)
(if (= i 0)
other
(cont-frac-t (- i 1) (/ (n i)
(+ (d i) other)))))
(cont-frac-t (- k 1) (/ (n k)
(d k))))
这道习题我们就此完成了,再接再厉完成这一节的最后一题。不对,反面还有一题。
版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。
转载于:https://www.cnblogs.com/NoMasp/p/4786187.html
【SICP练习】31 练习1.37相关推荐
- xampp php5.6 7.1共存,New XAMPP with PHP 7.2.8, 7.1.20, 7.0.31 5.6.37
嗨,阿帕奇的朋友们! We just released new versions of XAMPP for all platforms with the latest PHP versions: 7. ...
- 讯飞语音识别_讯飞输入法持续功能创新 语音输入最受用户认可
犹记得10多年前功能机上的输入法,无论是拼音还是笔画,通过物理键盘按部就班地进行输入,效率异常低下:所幸那时候网络没有那么发达.手机聊天应用并不怎么丰富,而且彼时手机还只是"通讯设备&quo ...
- 156 13.67用matlab答案,数学实验(MATLAB版韩明版)5.1,5.3,5.5,5.6部分答案
<数学实验(MATLAB版韩明版)5.1,5.3,5.5,5.6部分答案>由会员分享,可在线阅读,更多相关<数学实验(MATLAB版韩明版)5.1,5.3,5.5,5.6部分答案(1 ...
- ADPRL - 近似动态规划和强化学习 - Note 4 - Policy Iteration Algorithms
Note 4 - Policy Iteration Algorithms 4. Policy Iteration Algorithms 补充:范数的性质 4.1 贪婪诱导策略的特性 (Properti ...
- netty集成ssl完整参考指南(含完整源码)
虽然我们在内部rpc通信中使用的是基于认证和报文头加密的方式实现安全性,但是有些时候仍然需要使用SSL加密,可能是因为对接的三方系统需要,也可能是由于open的考虑.中午特地测了下netty下集成ss ...
- 计算机电缆djyvp工艺,计算机电缆dJyvP相关办法.pdf
计算机电缆 djyvp亚太电缆 电缆字母代表 -----------------------------1 塑料绝缘电力电缆 ---------------------------13 电子计算机用控 ...
- html中引入ifrim视频,Making Of Rallypoint - Outer Rim
269762fc6c25c4d01d7292abffc3360a.jpg (326.74 KB, 下载次数: 28) 2012-9-30 15:37 上传 Fig.02 Whilst creating ...
- android 弹幕时间戳,【存档】B站直播数据包分析连载(2018-12-11更新/2020-04-12废止)...
TODO: 这篇文章是我分析B站直播的数据包的过程,可能会有一些待补充的内容,如果有什么建议可以私信我或者跟评.感谢一下下面的各位做出的卓越贡献~ CREDITS: 冰块TiO2 - 提供样本数据(十 ...
- jvm 系列(九):如何优化 Java GC 「译」
本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的"Become a Java GC Expert ...
- 第十篇学会编写python代码_Python之路,第十篇:Python入门与基础10
python3 函数 函数(function) 什么是函数: 函数是可以重复执行的代码块,可以重复使用: 作用: 定义用户级的函数:实现了一个代码块的封装: 语法: def 函数名(参数列表): 语句 ...
最新文章
- java对象的访问定位_2、JVM-Java对象的创建、对象结构、对象访问定位-Go语言中文社区...
- 天龙源码分析 - 选择角色流程
- R语言dplyr包进行dataframe的连接(inner_join、left_join、right_join、full_join、semi_join、anti_join)操作实战
- 模块化以及requirejs和seajs
- 游国色天香中国馆有感
- [CQOI2018] 解锁屏幕(状压dp)
- 电脑表格日期怎么修改原有日期_为何电脑系统时间常出错或无法修改?怎么解决?...
- JAVA入门级教学之(内存中的空指针异常)
- 第 1-7 课:数组和排序算法 + 面试题
- [URAL1962]并查集
- VB编程语言基础知识点总结(转)
- Python小白的数学建模课-11.偏微分方程数值解法
- 【VISIO安装问题】无法安装64位版本的office,因为在您的PC上找到以下32位程序
- BAT机器学习面试1000题系列大集合整理(320)
- QQ群邮件批量群发源码
- Fabric.js IText 手动设置斜体
- android sdcard下创建文件,android创建以及使用SDcard镜像文件
- unity 游戏内实现3连击动画(状态机)
- FTPS“严重错误: gnutls_handshake: A TLS fatal alert has been received.”
- linux字符集设置为英文,NLS_lang参数设置-linux设置字符集(国外英文资料).doc