blogこの広告は、90日以上更新していないブログに表示しています。sicpなんかTLでHaskellでフィボナッチ数列の40項の単純再帰の計算が40秒かかる、とかなんとか話題になっていたので、最近の式の評価戦略のこともあるのでなんか書く。n"を求める式を書こうとすると、以下のようになると思います。(n-2)これを普通に計算すると、確かに時間がかかる。(n-2)を別個に計算するから、その度に同じfibが多重に呼び出しされて計算量が膨大になるからといえる。SICPの1.2.2節にfibの計算の木が載っているので、これを見ればいかに計算量が増えていくかがよく想像できると思う。するか、という話だが。processの2つの計算の戦略を挙げている。前者は、いまやったような式で定義される再帰で、fibのようなのもだと木状の計算構造になる。x+y)への変換のくり返し(iteration)とで生成する列と考える事ができる。[1,0]説明すると、fibgenで数列を膨らませる1ステップを表現して、それをiterateで何度も繰り返して、fib'でそのhead(途中まで作ったフィボナッチ数列の末尾項)を取る。すると、ちゃんとfast(processが線形なので)に計算してくれてめでたしめでたし♪でも実際haskellには正格な評価という概念があるし、正格版の再帰的定義が出来るようになっているし、わざわざこんなことしなくてもいいんですけどねえ。(すいません、Haskellのことはあまり知らないのです><)まあ、SICPの話も出ましたし、おぼえがきということで。練習ssreflect始めました.月別アーカイブはてなブログをはじめよう!srbsrbさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。