スカラーで再帰的ループを書くより良い方法があるのだろうかと思っていました。スカラーで再帰的ループを行う方法
def fib(n: Int) = {
def loop(a: BigInt = 0, b: BigInt = 1, n: Int = n): BigInt = {
if(n==0) a
else loop(b, a+b, n-1)
}
loop()
}
この
def fib(n: Int, a: BigInt = 0, b: BigInt = 1): BigInt = {
if(n==0) a
else fib(n-1, b, a+b)
}
が、その後aとbが露出し、もうメソッドの内部でカプセル化されていないことになるように私はそれを書くことができます。
これはほとんど完了です(最初の例)。内部の 'def'メソッドは、プライベートであることを保証し、テイルケイルのために最適化することもできます。 – huynhjl
2番目のバージョンも末尾再帰です。私は8月にこれらのパラメータをScala Languageメーリングリストのプライベートなものにする方法を追加する可能性について尋ねたところ、耳が聞こえない静寂/興味の欠如に遭遇しました。 http://www.scala-lang.org/node/10736 –
短い答え:いいえ。 –