webネタ

Webエンジニアが業務に関係することをメモしていく

Scalaでフィボナッチ数列のメモ

なんか面接とかでたまに書かされるらしいので

Listで再帰

// ListFib.f(100)
object ListFib {
  def f(lim: Int): List[Int] = {
    1 :: 2 :: f(1, 2, lim)
  }
  def f(a: Int, b: Int, lim: Int): List[Int] = if (b > lim) { Nil } else {
    b :: f(b, a + b, lim)
  }
}

Streamで再帰

// StreamFib.f().take(10).toList
object StreamFib {
  def f(a: Int = 1, b: Int = 1): Stream[Int] = b #:: f(b, a + b)
}