【递归】n个球中取出m个球的可能情况数

假象法:
在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);
	}
}

发布了81 篇原创文章 · 获赞 13 · 访问量 2398

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/104109747