フィボナッチ数が黄金比に収束するかの確認

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)
}