组合问题——从n种球种取出m个

组合问题: 从n种球中取出m个,有多少种取法,球的数量不限。

  思路:采用递归方式计算,可以认为是从 n 种球中取出 m – 1 个球,然后随意加上某一种A类球组合,由于球中所有有关A类的球组合已经求出,因此剩下的组合种不会包含A类球,故剩下的组合数为从 n – 1 种球中取出 m 个球. 公式表示如下:
 

f(n,m)=f(n,m1)+f(n1,m)  m>0,n>0

其中:

f(n,1)=n

f(1,m)=1

根据公式递归求解即可.

public int combination(int n, int m) {
    if (n < 1 || m < 1)
        return 0;
    if (m == 1)
        return n;
    else if (n == 1)
        return 1;
    return combination(n, m - 1) + combination(n - 1, m);
}
点赞