编写一个python代码来计算递归公式

2024-06-16 14:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个每回合由骰子的滚动组成的游戏中,当骰子是偶数时,玩家E得到一分,当骰子是奇数时,玩家O得到一分。第一个累积7分的玩家获胜。假设骰子是公平的,游戏被E领先4-2打断。编写python3代码来计算递归公式,以确定在上述情况下E得到的货币份额,其中p = 0.5, e = 4, o = 2 and m = 7。写下E的比例。你知道吗

从给出的问题,我们可以得出p = 0.5, m = 7, e = 4, o = 2。设A为事件玩家E在m - e = 3轮中获胜,B为事件玩家O在m - o = 5轮中获胜。P(A,B) = p.P(A-1,B) + (1-p)P(A,B-1),边界P(0,k)=1, P(k,0) = 0表示所有正整数k。因此,一般递归公式为P(m-e, m-o) = p.P(m-e-1,m-o) + (1-p)P(m-e, m-o-1)$ in terms of $p, m, e, o。你知道吗

但是,我不确定如何将这个数学公式转换成Python代码?你知道吗


Tags: and代码游戏公平货币玩家事件骰子
1条回答
网友
1楼 · 发布于 2024-06-16 14:42:43

这个问题其实不需要递归。你想知道在你得到5个赔率之前得到3个偶数的概率是多少。这意味着我们需要在接下来的3+5-1=7次尝试中获得至少3个偶数的概率(因为如果你只获得2个偶数,你将获得5个赔率,O将获胜)。你知道吗

编写一个非递归函数要容易得多,它使用所有参数(p,e,o,m)以这种方式简单地计算所需的数量。如果骰子不公平,您还可以设置获胜方的概率:

from itertools import permutations

def combos(win, avail):
    array = [1]*win + [0]*(avail-win)
    return len(set(permutations(array)))

def win_probability(p_winner, winner_score, loser_score, max_score):
    winner_needs = max_score - winner_score
    loser_needs = max_score - loser_score
    available_rolls = winner_needs + loser_needs - 1
    prob = 0
    for winner_rolls in range(winner_needs, available_rolls + 1):
        prob += combos(winner_rolls, available_rolls) \
            * p_winner ** winner_rolls \
            * (1 - p_winner) ** (available_rolls - winner_rolls)
    return prob

print(win_probability(.5,4,2,7))

'''
Out:
    0.7734375
'''

相关问题 更多 >