刚开始,想用它的定义来做
C(m,n) = m!/(m-n!*n!)
但是发现如果用int的话,阶乘的运算到13就爆int了,所以算这个不要写一个阶乘函数然后让他们运算,而是应该先化简后再来计算。
化简之后我发现其实算C(m,n)只要计算min(n,m-n)次就可以了
代码如下
private static int c(int m,int n){
//temp 为答案
double temp = 1;
//保证n>=m-n
if(n<m-n)
return c(m,m-n);
for(int i=0;i<m-n;++i){
temp*=n+i+1;
temp/=i+1;
}
return (int)temp;
}