Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

ScalaのSnippetを写経する(2)-BigInt

Snippet: BigInt | The Scala Programming Language
IntからBigIntにはシームレスですよーというサンプルだと思う。

package sample.snippet

object BigIntSample extends Application {

  def functional(n: BigInt): BigInt = {
    if (n == 0) {
      1
    } else {
      n * functional(n - 1)
    }
  }
  
  val f50 = functional(50)
  val f49 = functional(49)
  val f4 = functional(4)
  
  println("50! = " + f50)
  println("49! = " + f49)
  println("4! = " + f4)
  println("50!/49! = " + (f50 / f49))
}

functionalメソッドは再帰。
階乗を計算するメソッド。心配だったので引数4を追加して確認した。


実行結果。

50! = 30414093201713378043612608166064768844377641568960512000000000000
49! = 608281864034267560872252163321295376887552831379210240000000000
4! = 24
50!/49! = 50

大きな数値も扱えます。