我试图编写this answer中给出的递归函数(遗憾的是,由于缺少LaTeX,我不能在这里发布),在Python 3.0中。
我是编码的新手,这是我的尝试: -
def q(r,b,L):
pr = r/(r+b)
for k in range(1,L+1):
for j in range(1,k):
pr = pr * ((r-j)/(r+b-j)) * (b/r+b-j) * q(r-j,b-1,L)
f = pr + ((b/(r+b)) * q(r,b-1,L))
return f
但是这给了我一个零"除以零" q(3,0,2)的错误。任何人都可以帮我提供代码吗?
答案 0 :(得分:1)
我不确定你的是that答案中给出的功能的确切翻译。
在我看来它应该是这样的:
def q(r, b, L):
s = 0
for k in range(1, L+1):
p = 1
for j in range(0, k):
p *= (r - j) / (r + b - j)
s += p * b / (r + b - k) * q(r - k, b - 1, L)
return b / (r + b) * q(r, b - 1, L) + s
但是这个递归函数定义缺少基本情况(意味着函数产生结果的输入很简单,即没有重复出现)。
这里你只有递归的情况(意思是函数自己调用的输入)。
您应该添加以下支票:
if r <= L:
return 1;
if b <= 0:
return 0;
(这还不够)