SICP學習筆記 P27 P28

2021-09-07 22:24:48 字數 1427 閱讀 7342

函式f如下定義: 如果n<3, 那麼f(n)=n; 否則f(n)=f(n-1)+2*f(n-2)*3*f(n-3). 寫出乙個遞迴和乙個迭代求這個問題.

遞迴:

(define (f n)

(if (< n 3)

n(+ (f (- n 1))

(* 2 (f(- n 2)))

(* 3 (f(- n 3))))))

迭代:

(define (f n)

(if (< n 3)

n(f-iter 2 1 0 n)))

(define (f-iter a b c count)

(if ( = count 2)

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

寫乙個pascal函式, 輸入行和列, 求帕斯卡三角形中這個行和列的值.

答案非常巧妙的把帕斯卡三角形放到了乙個**中. **中每一行的第乙個數從**的第一列開始, 那麼求第row行第col列就可以非常形象描述成求第row-1行col列和row-1行和col列的和, 而這種方法最好的地方在於它表示每一行第乙個數和最後乙個數是1.

(define (pascal row col)

(cond ((= row 1) 1) ;第一行值為1

((= row col) 1) ;行和列相同的項值為1

((= col 1) 1) ;第一列值都為1

(else (+ (pascal (- row 1) col)

(pascal (- row 1) (- col 1))))))

證明斐波那契數列第n個數fib(n)是最接近φn/根號5的整數,其中φ=(1+根號5)/2.

這題是看的答案, 證明過程也非常的直觀明了.

設fi = (1+根號5)/2, psi = (1-根號5)/2

第一步目的要證明fib(n) = (fin - psin)/根號5, 採用數學歸納法:

當n=0時, fib(0) = (fi0 - psi0)/根號5 = 0, 成立

當n=1時, fib(1) = (fi1 – psi1)/根號5 = 1, 成立

推廣到n時, fib(n) = fib(n-1) + fib(n-2) = (fin-1 – psin-1 + fin-2 – psin-2)/根號5

= ((fi + 1)fin-2 – (psi +1)psin-2)/根號5    , 式1

因為fi2 = fi + 1, psi2 = psi + 1

所以式1= (fin - psin)/根號5, 即可證明第一步的式子.

當n趨向於無窮大的時候, 因為psi=-0.618, 所以psin趨向於0, 即可得證fib(n)是最接近φn/根號5的整數.

C primer學習筆記 p39 p54

初始化不同於賦值,初始化是建立變數並臨時賦予其乙個初始值,而賦值是把物件當前值擦除,而以乙個新值來替代。c primer 第五版 p39 定義在函式體內的內建型別物件如果沒有初始化,則其值為定義。類的物件如果沒有顯式的初始化,則其值由類決定。c primer 第五版 p40 1.1 定義在函式體內的...

JavaScript 學習筆記 p17 25

自增 使變數在自身的基礎上增加1,原變數值立即自增1。後加加 a 前加加 a a 原值。a 新值。自減 變數在自身的基礎上減1。後剪剪 a 前剪剪 a a 原值。a 新值。3 種邏輯運算子 非 對值進行非運算 返回值都變成布林型別 true false,false true 與 對符號兩側的值進行與...

JavaScript 學習筆記 p51 60

函式 function 也是乙個物件,函式可以封裝一些功能 在需要時可以執行這些功能 函式中可以儲存一些 在需要的時候呼叫。建立乙個函式物件。可以將要封裝的 以字串的形式傳遞給建構函式 var fun new function console.log hello 該 在函式呼叫時執行。呼叫函式 語法...