2011-09-22 84 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。當你遞歸的時候你必須使用這個名字。