假象法:
在n个球中,假象出一个幸运球。把所有出现的情况罗列在出来。
则情况可以分为两种:一种是包含幸运球;另一种是不包含幸运球。
包含幸运球的组合为f(n-1,m-1) [幸运球已被选出,所以在n-1个球中挑m-1个]
不包含幸运球的组合为 f(n-1,m) [幸运球已被排除在外,所以在n-1个球中挑m个]
package 递归;
//题目描述:n个球中取m个有多少种不同的取法?
public class _05_n个球中取m个的可能性 {
public static int f(int n,int m){
/**
* 确定退出条件。
*/
if(m>n) return 0;
if(m==n) return 1;
if(m==0) return 1;
/*
* 假象法:
* 在n个球中,假象出一个幸运球。把所有出现的情况罗列在出来。
* 则情况可以分为两种:一种是包含幸运球;另一种是不包含幸运球。
* 包含幸运球的组合为f(n-1,m-1) [幸运球已被选出,所以在n-1个球中挑m-1个]
* 不包含幸运球的组合为 f(n-1,m) [幸运球已被排除在外,所以在n-1个球中挑m个]
*
*/
return f(n-1, m-1)+f(n-1, m);
}
public static void main(String[] args) {
int k = f(10,3);
System.out.println(k);
}
}