SICP問題1.11
n < 3 の時 f(n) =n
n >= 3 の時 f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)
まず再帰的プロセスでfを計算する手続き。
(define (recursive-f n) (cond ((< n 3) n) (else (+ (recursive-f (- n 1)) (* 2 (recursive-f (- n 2))) (* 3 (recursive-f (- n 3)))))) )
次に反復的プロセスでfを計算する手続き。
(define (iterative-f n) (define (f n1 n2 n3) (+ n1 (* 2 n2) (* 3 n3)) ) (define (iter-f n1 n2 n3 counter max-count) (if (> counter max-count) (f n1 n2 n3) (iter-f (f n1 n2 n3) n1 n2 (+ counter 1) max-count)) ) (cond ((< n 3) n) (else (iter-f 2 1 0 1 (- n 3)))) )
他の方のを見ると、カウンターを減らしていって、数値を判定すればパラメータとして最大値はいらないということで、もっとすっきりしてますね。
(define (g n) (define (iter a b c count) (if (= count 2) a (iter (+ a (* 2 b) (* 3 c)) a b (- count 1)))) (if (< n 3) n (iter 2 1 0 n)))http://sicp.naochan.com/memo.pl?p=%CC%E4%C2%EA1.11