Posted on 2007-05-17 11:34
dennis 閱讀(724)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
計(jì)算機(jī)科學(xué)與基礎(chǔ)
搞定了工作,繼續(xù)做習(xí)題:)
題1.37:無(wú)窮連分式的過(guò)程描述,我發(fā)現(xiàn)這道題用迭代比遞歸反而更容易寫(xiě)出來(lái),遞歸不是那么顯而易見(jiàn)。
遞歸版本:
(define (cont-frace n d k)
(if (= k 1)
(/ (n 1) (d 1))
(/ (n k) (+ (d k) (cont-frace n d (- k 1))))))
再看迭代版本:
(define (cont-frace-iter n d result counter k)
(if (= counter 0)
result
(cont-frace-iter n d (/ (n counter) (+ (d counter) result)) (- counter 1) k)))
(define (cont-frace n d k)
(cont-frace-iter n d 0 k k))
當(dāng)n d的過(guò)程都是(lambda (x) 1.0)時(shí),趨近于1/φ(黃金分割比的倒數(shù)),通過(guò)計(jì)算可得知,當(dāng)k>=11時(shí),滿(mǎn)足十進(jìn)制的4位精度。
題1.38在1.37的基礎(chǔ)上,關(guān)鍵在于寫(xiě)出d過(guò)程,通過(guò)觀察給出的序列可以發(fā)現(xiàn),當(dāng)i-2是3的倍數(shù)時(shí),(d i)應(yīng)該返回2(i+1)/3,由此先寫(xiě)出d過(guò)程:
(define (d i)
(cond ((= i 1) 1)
((= i 2) 2)
((= (remainder (- i 2) 3) 0) (/ (* 2 (+ i 1)) 3))
(else
1)))
據(jù)此求出e:
(+ 2 (cont-frace (lambda(i) 1.0) d 1000))