問題1.37
反復版
(define (cont-fact n d k) (define (iter kai n d count) (cond ((= count 0) kai) (else (iter (/ (n count) (+ (d count) kai)) n d (- count 1))))) (iter 0 n d k))
(最初に書いたコードは間違ってました。黄金比の場合、Diが常に1なので、気づきませんでした。
次のネイピア数を求める時に、気づきました。)
再帰版
(define (cont-fact-recur n d k) (define (iter n d count) (if (= count k) (/ (n k) (d k)) (/ (n count) (+ (d count) (iter n d (+ count 1)))))) (iter n d 1))
ただ、答えを晒しても面白くないので、少しコメント。
この問題、最初に答えが浮かんだのは、反復版の方。
理由は、わからんけど、この問題のように、後ろから積み上げて行く、と言うものを連想させる場合は、反復版の方が考えやすいのか。
逆に、漸化式がはっきりわかっている場合は、それをコードに書き下してやれば良いので、再帰版の方が作りやすい。