再帰関数を、再帰的プロセス、反復的プロセスで記述せよ
; 答え合わせ用にトレース ; (f 3) ; ==> (+ (f 2) (* 2 (f 1)) (* 3 (f 0))) ; ==> (+ 2 (* 2 1) (* 3 0)) ; ==> (+ 2 2 0) ; ==> 4 ; (f 4) ; ==> (+ (f 3) (* 2 (f 2)) (* 3 (f 1))) ; ==> (+ 4 4 3) ; ==> 11 ; 再帰的プロセス (define (f n) (if (< n 3) n (+ (f (- n 1)) (* 2 (f (- n 2))) (* 3 (f (- n 3)))))) ; 反復的プロセス (define (f n) (define (f-iter a b c count) (if (= count 2) a (f-iter (+ a (* 2 b) (* 3 c)) a b (- count 1)))) (if (< n 3) n (f-iter 2 1 0 n)))
AnswerBookは、n<3の場合も反復関数の中で解決している。
ここは好みかな。