红白球概率问题 python

个袋子中有红球m个,白球n个。现在要从中取出x个球。那么红球数目多于白球的概率是多少呢?
下面的代码解决了这个问题。其中的y表示红球至少出现的次数。
这与前文的问题是等价的。因为如果取30个球,要求红球数大于白球数

该题目由递归出口很容易看出是一个递归题目,m/(m+n)是第一个球是红球的概率,再调用递归求接下来再取到红球概率
n/(m+n)是第一个球是白球的概率,调用递归求接下来取到红球概率,两者情况相加即可

def pro(m, n, x, y):
    #m袋中红球数目,n袋中白球数目,x需取出的数目,y红球至少次数
    if y>x:
        return 0
    if y==0: #红球至少是0,则怎么拿无所谓
        return 1
    if x - n > y:    拿完白球后,还要拿的红球数就比白球多,必然概率为1
        return 1
    p1 = n/(m+n) * pro(m, n-1, x-1, y) 
    p2 = m/(m+n) * pro(m-1, n, x-1, y-1)
    return p1 + p2
print(pro(5,5,5,3))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值