我需要一种计算组合而不耗尽内存的方法。这是我到目前为止所拥有的。
public static long combination(long n, long k) // nCk { return (divideFactorials(factorial(n), ((factorial(k) * factorial((n - k)))))); } public static long factorial(long n) { long result; if (n <= 1) return 1; result = factorial(n - 1) * n; return result; } public static long divideFactorials(long numerator, long denominator) { return factorial(Math.Abs((numerator - denominator))); }
我已将其标记为C#,但理想情况下,解决方案应独立于语言。
public static long combination(long n, long k) { double sum=0; for(long i=0;i<k;i++) { sum+=Math.log10(n-i); sum-=Math.log10(i+1); } return (long)Math.pow(10, sum); }