[英]How to write this sum of a sum recursively in python?
我將如何在python中遞歸地編寫此函數: My Question (第一個答案)? 這是我到目前為止的內容:
def f(n, p, k, t):
sum(for p in xrange(1, 7):
sum(for i in xrange(1,7):
if n == 3: return 1
if k == 1: return 0
return (1/36) * f(n-1,p,k-1,t-max(p,i))
)
)
print sum([f(5,j,3,15) for j in xrange(1, 7)])
任何幫助表示贊賞,謝謝! :D
編輯:從鏈接的問題是這樣的:
“假設我有5個(n),6面(d)普通骰子。如何計算出多少個擲骰子,前3(k)個擲骰數等於15(t)?我使用諸如f(n,d,k,t)= ∑i = 1jf(something,with,n,d,k,t ...)之類的遞歸來進行此操作,我如何計算出來嗎?請幫忙。謝謝。”
我得到的答案是:
離開我的評論,如果我們添加一個參數p作為不在當前前k中的最高骰子(並且丟棄d,因為所有骰子無論如何都是6面的),那么我相信我們可以得到以下結果:f( n,p,k,t)= ∑p'= 16∑i =16136⋅f(n-1,p',k-1,t-(max(p',i)))變量i表示結果被扔下一個死。
我不知道這是否正確。 我只是對這個問題着迷,想解決這個問題。 這就是我想出的。
然后,在n = 3,k = 1的情況下,基於遞歸的情況下,總和15的最終概率將為∑p = 16f(5,p,3,15)。
得出這樣的遞歸的基本思路如下:您想知道到達狀態A的概率。然后,您將考察所有可以立即到達A的情況,並將到達這些狀態的概率乘以從“預狀態”達到A。 然后,您可以對所有預設狀態進行匯總。
我之所以沒有將其復制過來,是因為sigma符號和LaTeX的點點滴滴都沒有出現在stackoverflow中。
您只是有些混在一起。
對於循環:
for p in range(1, 7):
statement()
生成器表達式:
expression() for p in range(1, 7)
請注意,沒有冒號,並且值在for
之前。
如果聲明:
if predicate():
true_stmt()
else:
false_stmt()
如果表達:
true_expr() if predicate() else false_expr()
def f(n, p, k, t):
return sum(sum(1 if n == 3 else
(0 if k == 1 else
(1/36) * f(n-1, p, k-1, t-max(p,i))))
for i in range(1, 7))
for p in range(1, 7))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.