-1

Python初学者,运行2.7

我想在 Python 中定义一个函数,比如 N(d),递归;具有以下性质:它对 a*b*N(a)N(b) 的乘积求和,对于大于或等于 0 的 a 和 b 整数,并且 a + b = d,d 是变量。谢谢。

添加

N(1)=N(2)=1

4

2 回答 2

4

记忆化带来了出色的递归性能。

def N(d, memoize = dict()):
    if d == 1 or d == 2: return 1
    if d in memoize: return memoize[d]
    result = 0
    for i in xrange(1, d):
        result += (d - i) * (i) * N(d - i) * N(i)
    memoize[d] = result
    return result

print N(1000)

或者,以更简洁的方式,

def N(d, memo={1:1, 2:1}):
    # http://oeis.org/A112915
    if d not in memo:
        memo[d] = sum(i * (d - i) * N(i) * N(d - i) for i in range(1, d))
    return memo[d]
于 2013-11-08T07:39:28.290 回答
1
def N(d):
    if d == 1:
        return 1
    if d == 2:
        return 1
    sum = 0
    for i in range(1,d):
        tmp1 = N(i)
        tmp2 = N(d-i)
        sum += i*(d-i)*tmp1*tmp2
    return sum

print N(5)
于 2013-11-08T07:25:41.767 回答