原理介绍:
a^n需要作n-1次乘法运算,我们可不可以考虑使用已知结果,简化计算量呢?
答案是显然的,
当n是偶数时,我们只需要a^(n/2) * a^(n/2)
,这样就降低了一半的运算量,当n是奇数时,n-1是偶数哇,a^(n-1/2) * a^(n-1/2)*a
,也是可以降低约一半的运算量的。
1.递归写法:
int pow(int a, int n)
{
if(n == 0)
return 1;
if(n == 1)
return a;
if(n%2 == 0)
return pow(a*a,n/2);
//这里不写pow(a,n/2)*pow(a,n/2)是因为会出现重复计算情况
else
{
return pow(a*a,n/2)*a;
}
}
2.循环写法
class Solution {
public:
double myPow(double x, int n) {
long long N=n;
if(N<0){
x=1/x;
N=-N;
}
double ans=1;
double t=x;
for(long long i=N;i;i/=2){
if((i%2)==1){
ans*=t;
}
t=t*t;
}
return ans;
}
};