2011-09-22 65 views
2

使用python 2.7。Python中的递归问题

下面的代码允许我输入两个球队(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 

但是这将是一个容易得多是,如果函数可以递归编写,以便它会在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) 

任何帮助将不胜感激!

+0

建议:为获得最佳效果,复制/粘贴确切的python错误。 –

回答

5
return Total_Playoff_Probability(WP_1, k+1, WP_2) 

我认为你的意思

return PlayoffProb2(WP_1, k+1, WP_2) 

你,因为你试图把一个浮点数的功能得到了错误。显然,这不计算。

编辑

其实,这应该是:

return Total_Playoff_Probability + PlayoffProb2(WP_1, k+1, WP_2) 

正因为如此,你不与Total_Playoff_Probability做任何事情你计算后。如果k!= 167,你只需返回k + 1的值。

+0

对不起。你是对的。在进行修正之后,我仍然只能得到k值为0的值,而不是所有的k值都达到162。任何想法? –

+0

@BurtonGuster,看编辑 –

+0

当然,你只会得到一个结果。最终,你的函数只返回一个值'Total_Playoff_Probability'。 –

0

你已经调用了你的函数PlayoffProb2。当你递归的时候你必须使用这个名字。