理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

問題1-11

f(n)=f(n-1)+2f(n-2)+3f(n-3)を計算する問題。
再帰的プロセスは書き下すだけでできる。

(define (recursive-f n)
  (if (< n 3) n
      (+ (recursive-f (- n 1))
	 (* 2 (recursive-f (- n 2)))
	 (* 3 (recursive-f (- n 3))))))

反復的プロセスが相変わらずきびしい。
フィボナッチのヒントがなければわからなかったような悪寒がする。

(define (iterative-f n)
  (define (iterative-f-iter a b c n)
    (cond ((= n 1) b)
	  ((= n 2) a)
	  (else (iterative-f-iter 
		 (+ a (* 2 b) (* 3 c)) a b (- n 1)))))
  (iterative-f-iter 2 1 0 n))