我需要一种计算组合的方法,而不会耗尽内存。这是迄今为止我所拥有的。计算二项式系数的算法
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#,但解决方案理想情况下应该与语言无关。
这些数字被称为“二项式系数”作为一个非常普遍的对象,已经在此之前出现:http://stackoverflow.com/q/4256188/422353 – madth3
究竟是你想什么样的组合得到?它只是nCk,还是其他的东西?我只是问,因为你的评论在顶部说“nCk”,但你的代码并不直接计算。 – phil13131
是的,将此行添加到factorial():'if(n> 20)throw new OverExceptionException();' –