采用递归方法去处理。
主要需要注意:
1.n为负数时
2.n为奇数时
class Solution
{
public:
double myPow(double x,int n)
{
if(x ==1 || n == 0)
{
return 1;
}
else if(n < 0)//n为负数时,需要把x变为1/x,再继续相乘
{
return 1/myPowSL(x,abs(n));
}
else
{
return myPowSL(x,n);
}
}
double myPowSL(double x,int n)
{
if(n == 1)
{
return x;
}
//n为偶数时,从x开始,每次把上一次的结果进行平方,最终能得到所求的数
if(n % 2 == 0)
{
double half = myPowSL(x,n/2);
return half * half;
}
//n为奇数时,从x开始,每次把上一次的结果进行平方后,还要额外乘一个x.
else
{
double half = myPowSL(x,n/2);
return half * half * x;
}
}
};