SICP 習題 1 15 解題總結

2021-09-01 20:08:06 字數 808 閱讀 4821

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