python递归(指数)

时间:2018-01-23 17:29:24

标签: python recursion

快速取幂,我需要编写一个算法,可以比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))

1 个答案:

答案 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))