我需要一種計算組合的方法,而不會耗盡內存。這是迄今爲止我所擁有的。計算二項式係數的算法
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();' –