演習 1.11 :
関数は、 ifとif
f
というルールによって定義されます。再帰的なプロセスによって計算する手続きを書きなさい。反復プロセスによって計算する手続きを書きなさい。f(n) = n
n < 3
f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)
n > 3
f
f
再帰的に実装するのは簡単です。しかし、それを繰り返し行う方法がわかりませんでした。与えられたフィボナッチの例と比較してみましたが、類推として使用する方法がわかりませんでした. だから私はあきらめて(私に恥をかかせて)、説明を求めてグーグルで調べました。そして、私はこれを見つけました:
(define (f n)
(if (< n 3)
n
(f-iter 2 1 0 n)))
(define (f-iter a b c count)
(if (< count 3)
a
(f-iter (+ a (* 2 b) (* 3 c))
a
b
(- count 1))))
読んだ後、コードとその仕組みを理解しました。しかし、私が理解していないのは、関数の再帰的定義からこれに到達するために必要なプロセスです。誰かの頭の中でコードがどのように形成されたのかわかりません。
解決策にたどり着くまでに必要な思考プロセスを説明していただけますか?