c语言:在n个球中,任意取出m 个(不放回),有多少种不同取法

if(n<m)
return 0;
if(n==m)
return 1;
if(m==0)
return 1;
return f(n-1,m-1)+f(n-1,m);

怎么理解这段代码?n,m从键盘输入

if(n<m)
return 0;
如果总球数小于取出的球数,则返回0,比如一共有10个球,你要取出11个。显然是没法取,取法是0。

if(n==m)
return 1;
如果总球数小于取出的球数,则返回1,比如一共有10个球,你要取出10个。只能全部取出,取法是1。
if(m==0)
return 1;
取出0个球。取法也一种,那就是不取。

除了以上的情况,那么可以取出的方式,就是
总球数减一后,取出球数减一后,所有的组合。加上总球数减一后,取出球数不变的组合。

return f(n-1,m-1)+f(n-1,m);

重点是最后这一句。应该是一个递归调用。
也就是说,举个例子,如果从4个球里,取出3个。那么所有的取法,等于
3个球里取2个的所有取法,加上3个球里取3个的所有取法。

4个球里取3个。a,b,c,d,一共有abc,abd,acd,bcd 四种取法。
C4,3

3个球里取2个,a,b,c ,一共有ab,ac,bc三种。
3个球里取3个,a,b,c,一共有abc一种取法。

两边相等的,公式是成立的。
温馨提示:答案为网友推荐,仅供参考