Implement pow(x, n).
实现pow(x, n). 用递归来做,首先返回条件是n==0时返回1,接下来可以把n全换到正数去,不要要注意Integer.MIN_VALUE 到Integer.MAX_VALUE 转换时会出现溢出,需要处理一下。之后就是判断n是不是odd,是的话返回x*pow(x*x, n/2),不是的话返回pow(x*x, n/2)。代码如下:
public class Solution {
public double myPow(double x, int n) {
if (n == 0) {
return 1;
}
if (n < 0) {
x = 1 / x;
if (n == Integer.MIN_VALUE) {
return x* myPow(x, Integer.MAX_VALUE);
}
n = -n;
}
return n % 2 == 0? myPow(x*x, n/2): x * myPow(x*x, n/2);
}
}
还有一种思路是首先计算temp = pow(x, n/2), 如果temp是偶数的话,返回temp*temp,如果是基数的话,判断n,n是正数,返回
temp*temp*x,n是负数,返回temp*temp/x。代码如下:
public class Solution {
public double pow(double x, int m) {
double temp=x;
if(m==0)
return 1;
temp=pow(x,m/2);
if(m%2==0)
return temp*temp;
else
{
if(m > 0)
return x*temp*temp;
else
return (temp*temp)/x;
}
}
}