Python中的递归问题

Bur*_*ter 2 python recursion

使用python 2.7.

以下代码允许我输入两支球队(WP_1和WP_2)的胜率百分比(k)并确定两支球队的胜率百分比,即一支球队在赛季结束时获胜的概率( Playoff_Probability):

def PlayoffProb(WP_1, k, WP_2):
    TProb_2 = 0
    p = float(WP_1)/1000
    q = float(WP_2)/1000
    n = 162.0
    G = math.factorial(n)/(math.factorial(k)*math.factorial(n-k))
    Prob = G*(p**k)*((1-p)**(n-k))
    for c in range(0, k):
        G_2 = math.factorial(n)/(math.factorial(c)*math.factorial(n-c))
        Prob_2 = G_2*(q**c)*(1-q)**(n-c)
        TProb_2 += Prob_2
    Playoff_Probability = Prob*TProb_2
    print Playoff_Probability
    print TProb_2
Run Code Online (Sandbox Code Playgroud)

但更简单的是,如果函数可以递归写入,那么它将对每个可能的k值执行相同的操作,并返回结束本赛季的总概率更多的胜利(我相信应该由每个值的Playoff_Probability都通过k的函数运行,我试图将其设置为等于Total_Playoff_Probability).

我尝试了下面的代码,但是我得到一个TypeError告诉我'float'对象在返回Total_Playoff_Probability步骤时不可调用.我也完全不确定我是否正确设置了递归.

def PlayoffProb2(WP_1, k, WP_2):
    TProb_2 = 0
    Total_Playoff_Probability = 0
    p = float(WP_1)/1000
    q = float(WP_2)/1000
    n = 162.0
    G = math.factorial(n)/(math.factorial(k)*math.factorial(n-k))
    Prob = G*(p**k)*((1-p)**(n-k))
    for c in range(0, k):
        G_2 = math.factorial(n)/(math.factorial(c)*math.factorial(n-c))
        Prob_2 = G_2*(q**c)*(1-q)**(n-c)
        TProb_2 += Prob_2
    Playoff_Probability = Prob*TProb_2
    Total_Playoff_Probability += Playoff_Probability 
    if k == 162:
        return Total_Playoff_Probability
    else:
        return PlayoffProb2(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Win*_*ert 5

  return Total_Playoff_Probability(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)

我想你的意思

  return PlayoffProb2(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)

你有这个错误,因为你试图将浮点数视为一个函数.显然,这不计算.

编辑

实际上,它应该是:

   return Total_Playoff_Probability + PlayoffProb2(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)

事实上,在计算它之后,你没有对Total_Playoff_Probability做任何事情.如果k!= 167,则只返回k + 1的值.