在Python 3.0上编写递归函数

时间:2014-12-06 10:58:07

标签: python debugging

我试图编写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)的错误。任何人都可以帮我提供代码吗?

1 个答案:

答案 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;

(这还不够)