しばし悩む…
僕の解答
再帰的プロセスは、問題を置き換えればよいだけ。
(define (f n) (cond ((< n 3) n) (else (+ (f (- n 1)) (* 2 (f (- n 2))) (* 3 (f (- n 3)))))))
で、反復的プロセスで悩む。しばし、テキストとにらめっこ。
「3から順に計算していって、前回、前々回、前々々回の結果を渡していけば、計算できるかな?」と考えて、こんな感じ。
(define (f n) (if (< n 3) n (f-iter 0 3 n 2 1 0))) (define (f-iter product counter max-count f_n-1 f_n-2 f_n-3) (define (g) (+ f_n-1 (* 2 f_n-2) (* 3 f_n-3))) (if (> counter max-count) product (f-iter (g) (+ counter 1) max-count (g) f_n-1 f_n-2)))
とりあえず、計算結果は同じになったけど、反復的プロセスになってんのかなぁ?
解答例
所感
解答例はスマートだなぁ…