我正在尝试找出是否有更有效的编码方法,但我做不到。谁能帮我找出是否有更有效的编码方法?
下面是代码:
def iterative(n):
sum = 0
for i in range(1,n+1):
form = i*(i+1)**2
sum = sum + form
return(sum)
谢谢!
答案 0 :(得分:3)
如果您的意思是较短,那么:
def iterative(n):
return sum(i * (i + 1) ** 2 for i in range(1, n + 1))
print(iterative(10))
进行了一些效率测试,并给出了所有答案:
def iterative1(n):
return sum(i * (i + 1) ** 2 for i in range(1, n + 1))
def iterative2(n):
sum = 0
for i in range(1, n + 1):
form = i * (i + 1) ** 2
sum = sum + form
return (sum)
def iterative3(n):
return sum(map(lambda i: i*(i+1)**2, range(1,n+1)))
import time
x = time.time()
print(iterative1(10000000))
print( time.time() - x) # 5.313434600830078
x = time.time()
print(iterative2(10000000))
print(time.time() - x) # 5.021821975708008
x = time.time()
print(iterative3(10000000))
print(time.time() - x) # 5.61063551902771
似乎您是最快的(但IMO可读性较差)
答案 1 :(得分:1)
如果您真正在寻找速度,则可以进行数学运算并从中删除迭代方面。多项式的总和可以分解为总和,而小的总和可以用类似这样的方法直接求解(如果数量巨大,请注意浮点精度):
def iterative4(n):
return (n * (n + 1)//2)**2 + (n * (n + 1) * (2 * n + 1))//3 + (n * (n + 1))//2
例如,它的速度要快几个数量级-您可以使用迭代方法一次将n = 10000000的值计算大约15000次:
def iterative1(n):
return sum(i * (i + 1) ** 2 for i in range(1, n + 1))
def iterative4(n):
return (n * (n + 1)//2)**2 + (n * (n + 1) * (2 * n + 1))//3 + (n * (n + 1))//2
x = time.time()
print(iterative4(10000000))
print(time.time() - x)
#2500001166666841666675000000
#0.00030493736267089844
x = time.time()
print(iterative1(10000000))
print(time.time() - x)
#2500001166666841666675000000
#4.789726972579956