使用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)
任何幫助將不勝感激!
建議:爲獲得最佳效果,複製/粘貼確切的python錯誤。 –