以下是一个快速幂算法的程序代码:
def pow(x, n):
if n==0:
return 1
elif n==1:
return x
elif n%2==0:
return pow(x*x, n//2)
else:
return pow(x*x, n//2)*x
时间复杂度是由算法中基本语句的执行次数决定的,快速幂算法作为递归算法其时间复杂度主要由递归调用自身的次数决定。
快速幂算法的基本结束条件为n等于0或1,假设n总是被2整除,那么程序总的执行次数为:
n
2
i
=
1
\frac{\mathrm{n}}{2^{i}}=1
2in=1
得到:
i
=
log
2
(
n
)
\mathbf{i}=\log _{2}(n)
i=log2(n)
所以快速幂算法的时间复杂度为O(log n)。当n不能总是被2整除时,能减少一些调用次数,但是并不改变其数量级。