1、递归快速幂![](https://img-blog.csdnimg.cn/6653616d793847ae8d8f37e08f4fda76.png)
计算a的n次方,如果n是偶数(不为0),那么就先计算a的n/2次方,然后平方;如果n是奇数,那么就先计算a的n-1次方,再乘上a;递归出口是a的0次方为1。
int quickpow(int a, int n)
{
if(n == 0)
return 1;
else if(n % 2 == 1)
return qpow(a, n - 1) * a;
else
{
int t = qpow(a, n / 2);
return t * t;
}
}
2、非递归快速幂
int quickpow(int a,int n){
int ans = 1;
while(n){
if(n&1) //如果n的当前末位为1
ans *= a; //ans乘上当前的a
a *= a; //a自乘
n >>= 1; //n往右移一位
}
return ans;
}