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 14 解題總結
sicp 習題 1.14要求計算出過程count change的增長階。count change是書中1.2.2節講解的用於計算零錢找換方案的過程。要解答習題1.14,首先你需要理解count change的工作方式,要理解count change的工作方式,最好是自己去實現一遍count chan...
SICP 習題 1 22 解題總結
sicp 習題 1.22 要求改進題中列舉出來檢查素數的過程,用來求1000,10000,100 000,還有1000 000附近的素數,然後比較求這些素數的時間,看是否符合 n 的複雜度。要完成這道題首先要將題目中列出的過程照抄到你的scheme環境中。因為書中的 使用了 runtime 過程,我...
SICP 習題 1 25 解題總結
sicp 習題 1.25 就是我上面說過的傷自尊的題了。習題1.25說到有個叫allyssa p.hacker的人說expmod過程完全沒有必要搞那麼麻煩,直接使用前面的fast expt過程和remainder過程就好了,她 叫alyssa的應該是女的吧 覺得可以這樣定義expmod define...