题目是:用递归的方法求C
int c(n, m)
{
if ( n == 1 ) return m;
return c(n-1, m) * (m-n+1) / n ;
} // m>=n
int c(int n,int m)
{
if(n==0)
return 1;
if(n==1)
return m;
if(n*2>m)
return c(m-n,m);
return c(n-1,m-1)*m/n;
}
组合最后不是要除N!吗,每个都除N,整合起来就是N!
c(n,m) = m!/(n!*(m-n)!)
= (m-1)!/((n-1)!*(m-n)!) * m/n
= c(n-1,m-1) * m/n
来晚了
提供zju 1202 题目! 就是一道组合题,楼主可以练练!
我以来晚了,希望也能得点分
m*(m-1)*....*(m-n+2)*(m-n+1)
C[N.M] = ---------------------------
1 * 2 * 3 * .... * n
m*(m-1)*....*(m-n+2)
C[n-1, m] = -------------------------
1*2*3*... *(n-1)
对比一下就看到了:
C[n, m] = C[n-1, m] * (m-n+1) / n
考虑到n=0的情形,代码修改一下就是:
int c(n, m)
{
if ( n == 0 ) return 1;
return c(n-1, m) * (m-n+1) / n ;
}