红球多于白球的概率(分治递归)
问题:
某个袋子中有红球 m个,白球 n个。现在要从中取出 x个球。那么红球数目多于白球的概率是多少呢?
请写个函数解决这个问题。
思考3分钟,答案在下面的下面……
m: 袋中红球的数目
n: 袋中白球的数目
x: 需要取出的数目
y: 红球至少出现的次数
1 double pro(int m, int n, int x, int y)
2 {
3 if(y > x) return 0;//需要取的球少于至少要取的红球
4 if(y == 0) return 1;//至少取的红球是0
5 if(y > m) return 0;//红球总数少于至少要取的红球
6 if(x-n > y) return 1;//取出所以白球后,还要取的球比至少要取的红球多
7 double p1 = pro(m-1,n,x-1,y-1);//取出红球的概率
8 double p2 = pro(m,n-1,x-1,y); //取出白球的概率
9 return (double)m/(m+n) * p1 + (double)n/(m+n) * p2;
10 }