Python初学者,运行2.7
我想在 Python 中定义一个函数,比如 N(d),递归;具有以下性质:它对 a*b*N(a)N(b) 的乘积求和,对于大于或等于 0 的 a 和 b 整数,并且 a + b = d,d 是变量。谢谢。
添加
N(1)=N(2)=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
记忆化带来了出色的递归性能。
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]
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)