問題1-11

明日の勉強会に向けて、予習がてら練習問題に取り組んでみました。まずは簡単そうなこの問題から取り組みましたが、反復プロセスの方の三つの引数の渡し方に手間取ってしまい、そこで今日は試合終了となってしまいました。しかし、なぞが解けた時の爽快感はたまらないものでした。この爽快感を忘れずに、今後もできるだけ自力で問題を解いていきたいと思っています。
ちなみに、再帰的プロセスの方では30程度でも、応答なし状態になってしまいましたが、反復プロセスならば、100でもあっという間に処理完了となり、アルゴリズムの重要性を再認識することができました。

(define (f n)
  (cond ((< n 3) n)
        (else (+ (f (- n 1))
                 (* 2 (f (- n 2)))
                 (* 3 (f (- n 3)))))))
(define (f n)
  (f-iter 2 1 0 n))

(define (f-iter a b c cnt)
  (if (= cnt 0)
      c
      (f-iter (+ a (* 2 b) (* 3 c)) a b (- cnt 1))))

(f 0)
(f 1)
(f 2)
(f 3)
(f 4)
(f 5)
(f 6)
(f 7)
(f 8)
(f 9)
(f 100)
0
1
2
4
11
25
59
142
335
796
11937765839880230562825561449279733086