n<3に対してf(n)=n,n>=3に対して、f(n)=f(n-1)+2f(n-2)+3f(n-3)なる規則で定義できる関数fがある。これを再帰的プロセス、反復的プロセスの方法で手続きを書け。
;再帰的プロセス
(define (xfib-rec n)
(cond ((< n 3) n)
(else (+ (xfib-rec (- n 1))
(* 2 (xfib-rec (- n 2)))
(* 3 (xfib-rec (- n 3)))))))
;反復的プロセス
(define (xfib-iter n)
(define (iter a b c count)
(cond ((< n 3) n)
((= count 2) a)
(else (iter (+ a (* 2 b) (* 3 c)) a b (- count 1)))))
(iter 2 1 0 n))
再帰的プロセスは驚くほど直感的にかけた。数式そのまま。
逆に反復的プロセスは木構造を一部書いてみてから、コードを書いた。
タイムインターメディアに答えが載ってるので参考にしてるんですが、反復的プロセスのコードがあんま良ろしくないような…
(define (f-iter n)
(define (iter a b c count)
(cond ((= count 0) c);負の数に対応していない
((= count 1) b);((= count 2) a)で良いのでは??
(else (iter (+ a (* 2 b) (* 3 c)) a b (- count 1)))))
(iter 2 1 0 n))
0 件のコメント:
コメントを投稿