SICP練習 7 練習1 11

2021-06-28 14:45:30 字數 753 閱讀 3671



這種題目太像是數學題目了,不過拿到程式設計上又有一些的難度。我們先根據題目中的條件,寫出類似於第

25頁最下面的變換規則。我們先列出如下內容:

a-- f(n-1)f(2)f(3)f(4)f(5)

b-- f(n-2)f(1)f(2)f(3)f(4)

c—f(n-3)f(0)f(1)f(2)f(3)

於是繼而得出下式:

a—a+2b+3c

b—ac—b

也就是說,當n=5時,a為f(4),而根據題目條件f(4)=f(3)+2f(2)+3f(1),而上面的式子中f(4)正好和前一列的f(3)、f(2)、f(1)可以建立起聯絡。於是乎,每下一次迭代中的a都是由上一次的a+2b+3c轉換過來的;同理,對於b和c也是這樣的。將計算的過程羅列出來,系統的分析有助於我們解決問題。感謝裴同學的提醒,在部落格上加上這一段解釋。

於是核心部分已經出來了:

(f-iter (a+2b+3c) a b (- counter 1))

最終寫成**即可:

(define (f n)

(f-iter1 0 0 n))

(define (f-iter a b c count)

(if(= counter 0)

b(f-iter (+ a (* 2 b) (* 3 c)) a b (- count1))))

模擬其實是乙個很好的學習方法,在博主的【

scheme

歸納】3

中,通過模擬學習了幾個很重要的關鍵字。

SICP練習 12 練習1 18

練習1.8 和前兩題一樣,依舊是只能用對數步數。而且這個迭代過程要基於加 加倍和折半運算。這乙個習題要用到前面的函式,因此最好的做法是,每次都將寫好的 儲存起來。load test1.18.scm 這行 可以用來載入 而儲存可以用c x,c w。以下是該題的 這次我們寫成塊結構 define x y...

SICP練習 17 練習1 23

練習1.23 首先我們按照題目要求來寫出相應的next函式,然後再修改find divisor函式。define next x if x 2 3 n 2 define find divisor ntest divisor cond square test divisor n n divides?te...

SICP練習 26 練習1 32

練習1.32 因為遞迴比迭代要更容易實現,因此我先考慮的遞迴。先將sum和product都列出來。define sum term a next b if a b 0 term a sum term next a next b define product term a next b if a b 1...