思路:递归折半相乘
耗时 0-4ms之间吧
double fun(double x, int n)
{
if (n == 0)
return 1;
double mid = fun(x, n / 2); //注意不要写成 int mid;这样可能会导致强制转换从而使 mid 变成 0;
if (n & 1)//如果n是奇数 n/2之后必定会少乘一个x ,所以这里补上那个x;
return mid * mid * x;
return mid * mid;
}
double myPow(double x, int n)
{
if (n == 0)
return 1.0;
if (n < 0)
{
return fun(1.0/x,n);//本来用的fun(x,-n),后来因为有个样例n=INT_MIN,转换成正数就会溢出,所以针对 x 做出调整为1.0/x;
}
return fun(x, n);
}