2 つの数値の組み合わせを計算する再帰的な方法を実装する必要がある課題に取り組んでいます。たとえば、 に5C3
なります10
。つまり、合計 5 つのオブジェクトのうち、3 つのオブジェクトの組み合わせは 10 通りあります。ただし、BigInteger クラスを使用する方法を実装して、2400 ピック 3 などのより大きな組み合わせを計算できるようにしたいと考えています。何らかの理由で、通常の整数の場合の動作と同じように、コードがまだ負の数を返します。 . 以下に私のコードを含めました。誰かが私が間違っているところを教えてもらえますか?
import java.math.BigInteger;
public class Combination {
public static BigInteger[][] memo = new BigInteger[3000][3000];
public static BigInteger choose(BigInteger n, BigInteger k) {
if (n.intValue() == 0 && k.intValue() > 0) {
return BigInteger.ZERO;
} else if (k.intValue() == 0 && n.intValue() >= 0) {
return BigInteger.ONE;
} else if (memo[n.intValue()][k.intValue()] != null) {
return memo[n.intValue()][k.intValue()];
} else {
memo[n.intValue()][k.intValue()] = choose(n.subtract(BigInteger.ONE), k.subtract(BigInteger.ONE)).add(choose(n.subtract(BigInteger.ONE), k));
}
return memo[n.intValue()][k.intValue()];
}
public static void main(String args[]) {
if (args.length < 1) {
System.out.println("Usage: java Combination <N> <K>");
System.exit(0);
}
int H = Integer.parseInt(args[0]);
int R = Integer.parseInt(args[1]);
BigInteger N = BigInteger.valueOf(H);
BigInteger K = BigInteger.valueOf(R);
System.out.println(choose(N, K).intValue());
}
}