問題1.11

しばし悩む…

僕の解答

再帰的プロセスは、問題を置き換えればよいだけ。

(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)))

とりあえず、計算結果は同じになったけど、反復的プロセスになってんのかなぁ?

所感

解答例はスマートだなぁ…