SICP 习题1.8需要我们做的是按照牛顿法求平方根的方法做一个求立方根的过程。

所以说书中讲牛顿法求平方根的内容还是要好好理解,不然后面这几道题做起来就比较困难。

反过来,如果理解了牛顿法求平方根的方法,做出一个求立方根的过程就很容易了。当然,我们需要一个改进猜测的方法,就是improve那部分,如果要我自己想出来这个改进方法我觉得是有挑战性的,还好书中直接写出来了,就是:((x / (y * y) )  +  ( 2 * y) )  /  3),其中y是猜测值,x是需要求立方根的数。

根据以上公式,我们定义一个next-try过程,相当于求平方根过程里的improve过程。

(define (next-try try-value x)
(/ (+ (/ x (* try-value try-value)) (* 2 try-value)) 3))

接着是定义try-cube-root 过程,整个过程几乎和书中的sqrt-iter过程相同,就是看猜测结果是否足够好,如果不够好就通过new-try过程计算一个更好的猜测结果出来继续。

也正因为求平方根和求立方根的过程有这么多相似的代码,所以我们可以对这个过程进行抽象,形成一个应用范伟更广泛的过程。有关这一点书中很快就会开始讨论。

回到我们的题目,定义的try-cube-root过程如下:

(define (try-cube-root try-value x)
(if (good-cube-root try-value x)
try-value
(try-cube-root (next-try try-value x) x)))

好,题目做完了,整体上还是比较简单,如果感觉这题比较难的,一般是因为没有理解牛顿法求平方根的部分,需要回到书中的正文去理解。

SICP 习题 (1.8) 解题总结的更多相关文章

  1. SICP 习题 (1.13) 解题总结

    SICP习题1.13要求证明Fib(n)是最接近φn/√5 的整数,其中φ=(1+√5)/2 .题目还有一个提示,提示解题者利用归纳法和斐波那契数的定义证明Fib(n)=(φn - ψn) / √5 ...

  2. SICP 习题 (1.7) 解题总结

    SICP 习题 1.7 是对正文1.1.7节中的牛顿法求平方根的改进,改进部分是good-enough?过程. 原来的good-enough?是判断x和guess平方的差值是否小于0.001,这个过程 ...

  3. SICP 习题 (1.14)解题总结

    SICP 习题 1.14要求计算出过程count-change的增长阶.count-change是书中1.2.2节讲解的用于计算零钱找换方案的过程. 要解答习题1.14,首先你需要理解count-ch ...

  4. SICP 习题 (1.9) 解题总结

    SICP 习题 1.9 开始针对“迭代计算过程”和“递归计算过程”,有关迭代计算过程和递归计算过程的内容在书中的1.2.1节有详细讨论,要完成习题1.9,必须完全吃透1.2.1节的内容,不然的话,即使 ...

  5. SICP 习题 (1.10)解题总结

    SICP 习题 1.10 讲的是一个叫“Akermann函数”的东西,去百度查可以查到对应的中文翻译,叫“阿克曼函数”. 就像前面的解题总结中提到的,我是一个数学恐惧者,看着稍微复杂一点的什么函数我就 ...

  6. SICP 习题 (1.41)解题总结

    SICP 习题1.41 看似和周边的题目没有关系,突然叫我们去定义一个叫double的过程,事实上这道题的核心还是高阶函数. 题目要求我们定义一个过程double,它以一个过程作为參数,这个作为參数的 ...

  7. SICP 习题 (2.10)解题总结: 区间除法中除于零的问题

    SICP 习题 2.10 要求我们处理区间除法运算中除于零的问题. 题中讲到一个专业程序猿Ben Bitdiddle看了Alyssa的工作后提出了除于零的问题,大家留意一下这个叫Ben的人,后面会不断 ...

  8. SICP 习题 (2.7) 解题总结 : 定义区间数据结构

    SICP 习题 2.7 開始属于扩展练习,能够考虑不做,对后面的学习没什么影响.只是,假设上面的使用过程表示序对,还有丘奇计数你都能够理解的话,完毕这些扩展练习事实上没什么问题. 习题2.7是要求我们 ...

  9. SICP 习题 (2.6) 解题总结:丘奇计数

    SICP 习题 2.6 讲的是丘奇计数,是习题2.4 和 2.5的延续. 这里大师们想提醒我们思考的是"数"究竟是什么,在计算机系统里能够怎样实现"数".准备好 ...

随机推荐

  1. 从一个标准 url 里取出文件的扩展名

    在php预定义函数中有一个叫做"pathinfo()"的函数,专门用于返回文件路径信息的. 那好,我们就来看一下它能为我们做些什么?       语法:pathinfo($url_ ...

  2. Android 下拉刷新控件Android-PullToRefresh

    需要用到一个开源库 Android-PullToRefresh https://github.com/chrisbanes/Android-PullToRefresh ---------------- ...

  3. git推送失败的问题

    git报错如下: fatal: 'origen' does not appear to be a git repositoryfatal: The remote end hung up unexpec ...

  4. 关于python decode()和 encode()

    1.先收集一下这几天看到的关于decode()解码和encode()编码的用法 bytes和str是字节包和字符串,python3中会区分bytes和str,不会混用这两个.字符串可以编码成字节包,而 ...

  5. Python核心编程2第五章课后练习

    5-1 整型,讲讲python普通整型与长整型区别 python整形一共有三种:布尔型,长整型和标准整型.普通整型与长整型的区别在于标准整形的取值范围是-2^31到2^31-1,长整型所能表达的数值与 ...

  6. 开启g++ 编辑器 c++11特性

    以前都是在windows下用vs和cvi写C和C++代码,最近练习Linux下的使用. 编译的时候使用C++11的新特性比如auto 和 iteration特性都报不支持,后来在知乎看到答案需要在编译 ...

  7. mac+eclipse+svn+maven经验总结(转)

    1.Eclipse for Mac:http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/indigo/SR2/ecl ...

  8. 更新wix installer里的Guid

    string path=@"\Setup\Installer"; var files = Directory.GetFiles(path); foreach (var item i ...

  9. Welcome to JimmyCheung's blog!

    博客开通,写写学习笔记,写写心情,写写生活中的点点滴滴~ 有钱的捧个钱场嘞,没钱的贡献个点击量,新鲜的博客出炉咯,来五毛钱的博文呗~ By Jimmy 2014.09.16

  10. 【转】django的ORM操作数据库样例

    这个算是我看到的大全了,希望可以解决明天我希望解决的两个问题... class Blog(models.Model): name = models.CharField(max_length=100) ...