フィボナッチ数が黄金比に収束するかの確認
30分プログラム、その436。またもmixiの課題コミュからぱくってきた。
フィボナッチ数列の第1項と2項を自身で決め、黄金比に収束するまで結果を出力するプログラム。より。
四則演算くらいしか書けないうちには荷が重過ぎる課題です・・・orz
よろしくお願いします><
n番目のフィボナッチ数をf(n)で表すと初項(第1項) f(0)=0 第2項 f(1)=1 漸化式:f(n+2)=f(n)+f(n+1)黄金比は1.618033でお願いしますm(__)m
四則演算が書けるなら解ける課題だよなぁ、と思いつつScalaの無限リストを使って解いてみた。黄金比を写し間違えて、結構時間がかかってしまった。
使い方
$ fsc -Xscript Main fib.scala $ scala Main 1 1 2 3 5 8 13 21 34 55 89 144 233 377
ソースコード
def fibonachi[T](prev : BigInt, current : BigInt) : Stream[BigInt] = Stream.cons(current,fibonachi(current,prev+current)) val xs = fibonachi(0,1) val ys = (xs tail) def is_phi(x : Double) : Boolean = (x - 1.618033).abs < 1e-6 for((x,y) <- (xs zip ys).takeWhile(x => !is_phi(x._2.doubleValue / x._1.doubleValue))){ println(x) }