练习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相关推荐

  1. 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. ...

  2. 讯飞语音识别_讯飞输入法持续功能创新 语音输入最受用户认可

    犹记得10多年前功能机上的输入法,无论是拼音还是笔画,通过物理键盘按部就班地进行输入,效率异常低下:所幸那时候网络没有那么发达.手机聊天应用并不怎么丰富,而且彼时手机还只是"通讯设备&quo ...

  3. 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 ...

  4. ADPRL - 近似动态规划和强化学习 - Note 4 - Policy Iteration Algorithms

    Note 4 - Policy Iteration Algorithms 4. Policy Iteration Algorithms 补充:范数的性质 4.1 贪婪诱导策略的特性 (Properti ...

  5. netty集成ssl完整参考指南(含完整源码)

    虽然我们在内部rpc通信中使用的是基于认证和报文头加密的方式实现安全性,但是有些时候仍然需要使用SSL加密,可能是因为对接的三方系统需要,也可能是由于open的考虑.中午特地测了下netty下集成ss ...

  6. 计算机电缆djyvp工艺,计算机电缆dJyvP相关办法.pdf

    计算机电缆 djyvp亚太电缆 电缆字母代表 -----------------------------1 塑料绝缘电力电缆 ---------------------------13 电子计算机用控 ...

  7. html中引入ifrim视频,Making Of Rallypoint - Outer Rim

    269762fc6c25c4d01d7292abffc3360a.jpg (326.74 KB, 下载次数: 28) 2012-9-30 15:37 上传 Fig.02 Whilst creating ...

  8. android 弹幕时间戳,【存档】B站直播数据包分析连载(2018-12-11更新/2020-04-12废止)...

    TODO: 这篇文章是我分析B站直播的数据包的过程,可能会有一些待补充的内容,如果有什么建议可以私信我或者跟评.感谢一下下面的各位做出的卓越贡献~ CREDITS: 冰块TiO2 - 提供样本数据(十 ...

  9. jvm 系列(九):如何优化 Java GC 「译」

    本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的"Become a Java GC Expert ...

  10. 第十篇学会编写python代码_Python之路,第十篇:Python入门与基础10

    python3 函数 函数(function) 什么是函数: 函数是可以重复执行的代码块,可以重复使用: 作用: 定义用户级的函数:实现了一个代码块的封装: 语法: def 函数名(参数列表): 语句 ...

最新文章

  1. java对象的访问定位_2、JVM-Java对象的创建、对象结构、对象访问定位-Go语言中文社区...
  2. 天龙源码分析 - 选择角色流程
  3. R语言dplyr包进行dataframe的连接(inner_join、left_join、right_join、full_join、semi_join、anti_join)操作实战
  4. 模块化以及requirejs和seajs
  5. 游国色天香中国馆有感
  6. [CQOI2018] 解锁屏幕(状压dp)
  7. 电脑表格日期怎么修改原有日期_为何电脑系统时间常出错或无法修改?怎么解决?...
  8. JAVA入门级教学之(内存中的空指针异常)
  9. 第 1-7 课:数组和排序算法 + 面试题
  10. [URAL1962]并查集
  11. VB编程语言基础知识点总结(转)
  12. Python小白的数学建模课-11.偏微分方程数值解法
  13. 【VISIO安装问题】无法安装64位版本的office,因为在您的PC上找到以下32位程序
  14. BAT机器学习面试1000题系列大集合整理(320)
  15. QQ群邮件批量群发源码
  16. Fabric.js IText 手动设置斜体
  17. android sdcard下创建文件,android创建以及使用SDcard镜像文件
  18. unity 游戏内实现3连击动画(状态机)
  19. FTPS“严重错误: gnutls_handshake: A TLS fatal alert has been received.”
  20. linux字符集设置为英文,NLS_lang参数设置-linux设置字符集(国外英文资料).doc

热门文章

  1. 如何以CustomValidator搭配jQuery AJAX进行Server端验证(转)
  2. Xcode 自定义代码块及代码块迁移
  3. 计算机基础-计算机系统的安装
  4. 树莓派配置RTC时钟(DS3231,I2C接口)
  5. PHP面向对象6之工具-魔术方法
  6. IE6下PNG背景透明的七种方法
  7. SQL Server数据库查询速度慢的原因
  8. 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员……
  9. SURF源码分析之fasthessian.h和fasthessian.cpp
  10. The Game Of Life – 数据结构与算法的敲门砖