簡體   English   中英

如何在python中遞歸地寫出這個總和?

[英]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循環與生成器表達式

對於循環:

for p in range(1, 7):
    statement()

生成器表達式:

expression() for p in range(1, 7)

請注意,沒有冒號,並且值在for之前。

If語句與條件表達式

如果聲明:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM