![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ae45c5365f3e77f507bbcca3566f951.png)
1 分类讨论
自己写的,觉得这种写法很low,可以过。
class Solution {
public:
double Power(double base, int exponent) {
double temp = 1.0;
if(exponent==1) return base;
if(exponent==0) return 1;
if(exponent>1)
{ for(int i=1;i<=exponent;i++)
{
temp = temp*base;
}
return temp;
}
else if(exponent<0)
{
for(int i=1;i<=abs(exponent);i++)
{
temp = temp*base;
}
return 1.0/temp;
}
}
};
2. 递归求解
3求幂也可以用递归求解,如下
class Solution {
public:
double abs_power(double base, int abs_exponent){
if(abs(abs_exponent) ==1)
return base;
return base*abs_power(base,abs_exponent-1);
}
double Power(double base, int exponent){
if(exponent ==0)
return 1;
else if (exponent>0)
return abs_power(base,abs(exponent));
else if (exponent<0)
return 1.0/abs_power(base,abs(exponent));
}
};
二分
上面两种方法,都是需要知道第n-1次的结果来求第n次的值,即f(n) = base*f(n-1),复杂度较大。可采用二分递归法。考虑n为奇数时,f(n) = base*f(n/2)*f(n/2);n为偶数时,f(n) = f(n/2)*f(n/2)。这样递归可降低复杂度。即快速幂方法
class Solution {
public:
double Power(double base, int exponent) {
if(exponent<0)
{
exponent=-exponent;
return 1/my_power(base,exponent);
}
return my_power(base,exponent);
}
double my_power(double base, int exponent)
{
if(exponent==0) return 1;
if(exponent%2==0)
return my_power(base,exponent/2)*my_power(base,exponent/2);
else
return base*my_power(base,(exponent-1)/2)*my_power(base,(exponent-1)/2);
}
};