`
阿尔萨斯
  • 浏览: 4107692 次
社区版块
存档分类
最新评论

SICP 习题 (1.8) 解题总结

 
阅读更多

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)))

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics