[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 13:46 / Filesize : 290 KB / Number-of Response : 990
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CommonLisp Scheme Part10



565 名前:デフォルトの名無しさん [04/06/09 14:50]
fibonacci 数列について質問です。
これを関数型の記述のまま、計算量を減らすことはできないでしょうか?


まず、定義どおりに関数型で記述してみました。
(define (fib x)
 (if (< x 2)
   1
   (+ (fib (- x 1)) (fib (- x 2)))))

これだと、定義がそのままコードになっていて、とてもわかりやすいのですが、
x の小さな項を何度も計算しなおすので、x が大きくなると計算量が膨れ
上がってしまいます。
Chez Scheme では x=35 ぐらいが限界でした。


手続き型で、小さい項をまず求めて、それをもとに大きな項を求めるように書くと、
計算量がはるかに少なくて済むのですが、わかりづらくなります。
定義がそのままコードになっている、関数型の記述とはだいぶ違います。
(define (fib2 n)
 (if (< n 2)
   1
   (do ((x1 1 (+ x1 x0))
      (x0 1 x1)
      (m 2 (+ m 1)))
     ((<= n m) (+ x1 x0)))))






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<290KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef