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


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

  • 相关阅读:
    RIP 动态路由
    9.28 二叉树计数
    9.31 取数理论
    花园
    迟滞变化
    AutoHotkey之自问自答
    几种常见的滤波处理
    快速排序(Quicksort)
    浅谈VBA
    新的开始
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3297052.html
Copyright © 2020-2023  润新知