【F#】Seq.unfoldは理解するのは難しいが・・・分かると簡単??その2

  • 2012.03.03 Saturday
  • 23:10
----------------------------------------------------------------------------
【関連】
【F#】Seq.unfoldは理解するのは難しいが・・・分かると簡単??
http://pro.art55.jp/?eid=1303926
【F#】Seq.unfoldは理解するのは難しいが・・・分かると簡単??その2
http://pro.art55.jp/?eid=1303927
【C#】F#のSeq.unfold関数をC#で実装してみた。
http://pro.art55.jp/?eid=1303928
【C#】F#のSeq.unfold関数をC#で実装してみた。その2
http://pro.art55.jp/?eid=1303929
-----------------------------------------------------------------------------

【F#】Seq.unfoldは理解するのは難しいが・・・分かると簡単??そ(http://pro.art55.jp/?eid=1303926)の続きです。

背伸びしてフィボナッチ数のシーケンスを求めたいと思います。
フィボナッチ数列は下記のように定義できるそうです(参照Wik)

式1: F_0 = 0
式2: F_1 = 1
式3: F_n2 = F_n + F_n1 (n>=0)
※_n1は下付のn+1、_n2は下付のn+2

(雑記)一般項の証明は高校でならったような気がしますが、完全に忘れていました。なんでルートが出てくるん??って、昔ならったとすれば、同じ事に2度驚いたことになります。

で、Seq.unfoldの第一引数の関数に当てはめてみたいと思います。

カレントの値がF_nならネクストの値はF_n1です。

式3はつまり二つ連続するフィボナッチ数を組とする引数をとると、そのFn1の次のフィボナッチ数が求められるということなので

F_n2 (F_n, F_n1) = F_n + F_n1

なので
カレントの状態(F_n, F_n1)を渡すとカレントの値がFnになり
カレントの状態(F_n, F_n1)を渡すとネクストの状態は(Fn1, Fn2)
(Fn1, Fn2)は(Fn1, Fn + Fn1)と書き換えることができます。

なのでフィボナッチ数列をシーケンスで表現すると

let fibonacciSequence = Seq.unfold (fun (f_n, f_n1) -> Some(f_n, (f_n1, f_n + f_n1))) (0, 1) 

となります。

コンソール出力させるコードも記述すると

let fibonacciSequence = Seq.unfold (fun (f_n, f_n1) -> Some(f_n, (f_n1, f_n + f_n1))) (0, 1) 
fibonacciSequence 
    |> Seq.takeWhile (fun number -> number <= 1000) 
    |> Seq.iter (printfn "%d")

で出力結果は

0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987

オライリーに書かれてるコードと差異がありますが、なんとか自分で記述することができました。
コメント
管理者の承認待ちコメントです。
  • -
  • 2018/06/06 3:56 PM
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   
<< October 2018 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM