【发布时间】:2015-12-22 17:58:01
【问题描述】:
我编写了以下代码,用于使用涉及五边形数的递推公式评估整数分区:
def part(n):
p = 0
if n == 0:
p += 1
else:
k = 1
while ((n >= (k*(3*k-1)/2)) or (n >= (k*(3*k+1)/2))):
i = (k * (3*k-1)/2)
j = (k * (3*k+1)/2)
if ((n-i) >= 0):
p -= ((-1)**k) * part(n-i)
if ((n-j) >= 0):
p -= ((-1)**k) * part(n-j)
k += 1
return p
n = int(raw_input("Enter a number: "))
m = part(n)
print m
代码在n=29 之前运行良好。 n=24 周围有点慢,但我仍然可以在不错的运行时内获得输出。我知道算法是正确的,因为产生的数字与已知值一致。
对于 35 以上的数字,即使等待了很长时间(大约 30 分钟),我也没有得到输出。我的印象是 python 可以处理比这里使用的数字大得多的数字。有人可以帮助我改善运行时间并获得更好的结果吗?另外,如果代码有问题,请告诉我。
【问题讨论】: