“反复平方”可以快速计算出一个数的平方,比方说,计算 a35 ,相当于计算 a34⋅a ,也即 (a17)2⋅a ,也即 (a16⋅a)2⋅a ,…, 最终简化为 ((((a2)2)2)2⋅a)2⋅a ,我们可从中清晰地看到递归的影子:
python 实现如下:
def fast_square(a, n):
if n==1:
return a
if n%2==0:
return fast_square(a, n//2)**2
return fast_square(a, n-1)*a