繁体   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