5

練習のために、役に立たないメソッド/関数を Scala で書いています。フィボナッチ数列関数を実装しようとしています。リファレンスとして使用するために Haskell で 1 つ作成しました (したがって、Java スタイルで作成するだけではありません)。Haskellで思いついたのは次のとおりです。

fib a b = c : (fib b c)
   where c = a+b

次に、これを行うことができます:

take 20 (fib 0 1)
[1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946]

だから私はこれをScalaに翻訳しようとしました:

def fib(a:Int, b:Int):List[Int] = {
  val c = a+b
  c :: fib(b,c)
}

しかし、使用しようとするとスタックオーバーフローエラーが発生します。Scala で遅延評価を機能させるために何かしなければならないことはありますか?

4

2 に答える 2