【发布时间】:2018-01-23 17:29:24
【问题描述】:
快速求幂,我需要写一个算法,计算 n^b 的速度比 n 次乘法还快!算法的复杂度为 O(logn)。 我有一个代码,我能够通过前 20 次测试(我看不到数字),但我无法改进算法以通过最后 5 次测试。有什么建议可以改进吗?
def quick_power(x, n):
if n == 0:
return 1
elif n == 1:
return x
elif n == 2:
return x * x
elif n % 2 != 0:
return x * quick_power(x, n - 1)
elif n % 2 == 0:
return quick_power(x, n // 2) * quick_power(x, n // 2)
x = int(input())
n = int(input())
print(quick_power(x, n))
【问题讨论】:
-
您正在重新计算大量冗余产品。为什么不使用表格来记忆你的函数呢?
-
这是一道作业题?
-
另外,如果您正在执行地板除法,您可以执行位移,它会快很多。
n >> 1 -
顺便说一句,为什么不返回
x ** n,它实际上在python中更快,因为它是用C实现的。 -
@cᴏʟᴅsᴘᴇᴇᴅ 我试过 x**n,但无法“通过”测试