对这个问题可以先减少n的个数如四个球取两个。
假设有a、b、c、d四个球,那么对于a有两种情况一种是确定要取、一种是确定不取。
即下面这两个情况:
- a球和其他三个球取一个
- 其他三个球取两个
用函数表示就是:假设f(n,m)是n取m的种类数,则上述情况就是f(4,2)=f(3,1)+f(3,2);
再对其进行抽象就是:
- 取第一个球和其他n-1个球取m-1个f(n-1,m-1)
- 不取第一个球和其他n-1个球取m个f(n-1,m)
表示成公式就是:f(n,m)=f(n-1,m-1)+f(n-1,m);
下面是具体的java实现的代码
// n个物体取m个,有多少种取法
public static int func(int n, int m) {
if(n<m)
return 0;
if(n==m)
return 1;
if(m==1)
return n;
return func(n - 1, m - 1) + func(n - 1, m);
}
public static void main(String[] args) {
int n = 10, m =3;
System.out.println(func(n, m));
}