2015/10/05
SICP 問題1.11
;; 再帰的プロセス
(define (f n)
(if (< n 3)
n
(+ (f (- n 1))
(* 2 (f (- n 2)))
(* 3 (f (- n 3))))))
;; 反復的プロセス
(define (g n)
;; iterでは3 ≦ nの時のみの処理.n1 はf(n-1),n2はf(n-2),n3はf(n-3)
(define (iter n1 n2 n3 count)
(if (= count 0)
n1
(iter (+ n1 (* 2 n2) (* 3 n3))
n1
n2
(- count 1))))
(if (< n 3)
n
(iter 2 1 0 (- n 2)))) ;;3≦nの時iter.n=1,2の時はn1,n2に渡してあるのでcountに渡す引数は(- n 2)