Implement pow(x, n).
题目:求x^n次方。
思路:用递归,但是自己写的时候没考虑仔细,出现了栈溢出的错误(java.lang.StackOverflowError)
public double myPow(double x, int n) {
if(n == 1){
return x;
}
double result = 0;
if(n > 1) {
result = x*(myPow(x,n-1));
}
return result;
}
上面这个方法修正一下,x^n = x^(n/2)*x^(n/2)*x^(n%2),这样估计不会超时了,递归减少一半。
public double myPow(double x, int n) {
if(n < 0){
return 1/power(x, -n);
} else {
return power(x,n);
}
}
public double power(double x, int n) {
if(n == 0) {
return 1;
}
double v = power(x, n/2);
if(n %2 == 0){
return v*v;
}else {
return v*v*x;
}
}