如何在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= 1 JF(某物,与,N,d,K,T ...) 基本案例是其他的东西。我怎么知道这个?请帮忙。谢谢。“
我得到的答案是:
关闭我的评论,如果我们添加一个参数p作为顶级模具而不是当前的顶部k(并丢弃d,因为所有骰子都是6面反正),那么我相信我们得到以下内容: F(N,P,K,T)=ΣP'=16Σi=16136⋅f第(n-1,P',K-1,叔(最大(P',I))) 变量i代表抛出下一个模具的结果。
我不知道这是否正确。我刚刚接受了这个问题,想要了解它。这就是我想出来的。
总和15的最终概率将是 σp值为= 16F(5,P,3,15) 在n = 3,k = 1的递归基本情况下。
提出这样的递归背后的一般想法如下:你想知道达到状态A的概率。然后你看看A可以立即到达的所有情况,并将达到这些状态的概率乘以从“前州”到达A的概率。然后你对所有前置状态进行总结。
我没有复制它的原因是因为sigma符号和LaTeX的碎片不会出现在stackoverflow中。
答案 0 :(得分:1)
你只是混在一起。
For loop:
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))