ところがいざプログラムで実装となるとガラスの壁ってのがあるわけです。ご存じのとおり整数型の上限は64ビット long で -9223372036854775808 から 9223372036854775807。
これだともっと大きな整数は扱えません。そこで、Java では整数を抽象化し、BigInteger として制限のない整数を表現します。
この BigInteger、四則演算は揃っているのですが、演算メソッドが限られていて、階乗がありません。いちいち定義すればいいわけですが、こんなところで立ち止まっていては世界が見えてこない。
そこで、BigInteger で階乗を計算するコードを載せておきます。
この階乗を使うと、組み合わせなど計算ができます。階乗で定義されるやつですね。
実はこの組み合わせ、再帰で定義できます。パスカルの三角形といわれるやつです。
証明はこちら。