sicp 習題 1.15要求計算過程sine的空間和步數增長階。
有人可能會和我一樣,問sine是什麼,呵呵,就是三角函式sin啦,書中講到一種求sin函式的方法,要求計算這種方法的增長階。
先看看sine過程的定義,書中全寫出來了,照抄出來:
(define (cube x) (* x x x))
(define (p x)
(- (* 3 x) (* 4 (cube x))))
(define (sine angle)
(if (not (> (abs angle) 0.1))
angle
(p (sine (/ angle 3.0)))))
首先題目問求(sine 12.15)的時候p過程呼叫了多少次,這個很簡單,在過程p裡加多幾句輸出,測試一下就好了,想下面這樣:
(define (p x)
(display "run !")
(newline)
(- (* 3 x) (* 4 (cube x))))
接著的問題才是這道題的根本,就是sine過程的空間和步數增長階是什麼?
要回答問題,我們先要理解這個過程的機制,它其實就是每次都將引數除於3,直到引數足夠小為止。
也就是說 0.1 * ( 3 的 x次方)= n ,其中n為要求的角度,x就是我們要求的步數。
於是有x = log
3(10n )
就是說步數的增長階是對數的。
因為是簡單的遞迴呼叫,所以空間增長階和步數增長階是相同的。
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...