递归快速幂
快速幂是一个二分的思路。我们很自然地可以得到一个递归方程:
计算a的n次方,如果n是偶数(不为0),那么就先计算a的n/2次方,然后平方;如果n是奇数,那么就先计算a的n-1次方,再乘上a;递归出口是a的0次方为1。
递归快速幂的思路非常自然,代码也很简单(直接把递归方程翻译成代码即可):
def qpow(a, n):
if n == 0:
return 1
elif n % 2 == 1:
return qpow(a, n - 1) * a
else:
tmp = qpow(a, n // 2)
return tmp * tmp
参考:https://zhuanlan.zhihu.com/p/95902286