[英]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.