読者です 読者をやめる 読者になる 読者になる

yy_taroのとりとめのない落書き

メインフレームの導入・設計・構築ができるぐらいの知識があったりする。

SICP始めました 2.5

SICP 二日目補

 

反復プロセスについて、何となく処理を書いてみた。

(define (f n)

 (define (f-iter a b c n)
  (cond ( (= n 0) a)
       ( (= n 1) b)

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

 

しかし、答えは再帰プロセスで作成したものと違う結果を返す・・・。

さすがにえいやで作ったものではだめか・・・。

考えた結果なんだか良さそうな雰囲気は出ているもののちょっと違うみたいです。

確かに(f 3)を処理してみると、nが2になったときにcを返してしまうのでいまいち。

 

f(n-1) = f(2)

2f(n-2) = 2f(1)

3f(n-3) = 3f(0)

 

と考えると(f-iter 0 1 2 n)だと初期値が逆だ。

しかし、逆にしても答えが若干違った。

 

ということで、今回はギブアップ

 

ちなみに答えはこんな感じ

(define (f n)

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

 

近いところまでは到達しているような気もする。

 

 

計算機プログラムの構造と解釈[第2版]

計算機プログラムの構造と解釈[第2版]