快速取幂,我需要编写一个算法,可以比n次乘法更快地计算n ^ b!算法的复杂性为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))
答案 0 :(得分:0)
你的想法是正确的,你的代码原则上没有错。关键是你需要区分两个状态,偶数和奇数
if n is even: x^n = (x^(n/2))^2
if n is odd: x^n = x*x^(n-1)
,你实际上做过的。
在不知道你最近的5次测试的情况下,很难弄清楚它失败的原因。但您可以尝试以下简化代码。
def quick_power(x, n):
if n == 0:
return 1
elif n % 2 == 0:
return quick_power(x, n / 2)**2
else:
return x * quick_power(x, n-1)
print(quick_power(3, 5))