快幂运算

递归法

'''
递归法比较好理解,如果指数能被2整除, 把底数平方,指数折半,否则,指数拆成1 + n-1,其中n-1可以被2整除
'''
def quick_pow_recursion(a, n):
    if n == 1:
        return a
    if n & 1 == 1:
        return  a * quick_pow_recursion(a, n-1)
    else:
        return quick_pow_recursion(a**2, n>>1)

非递归法

'''
迭代法主要还是三个变量,记录最终结果的result、指数n和底数a
result变量不用去修改他
指数和底数类似递归法的修改方法
'''
def quick_pow_iteration(a, n):
    result = 1
    while n > 0:
        if n % 2 == 1:
            result *= a
        a = a**2
        n = n >> 1
    return result

你可能感兴趣的:(算法与数据结构)