let k = n / 2;
let l = n - 2 * k;
thus 2 * k + l = n;
Recursively solve p1 = pow(x, k) and p2 = pow(x, l), and the solution is p1 * p1 * p2 if n > 0 and the reciprocal of that if n < 0.
Update: 2015 - 02 - 03
If n is an odd number, l will be 1. If n is an even number, l will be 0.
public class Power {
public double pow(double x, int n) {
if (n == 0)
return 1.0;
if (n == 1)
return x;
boolean isReciprocal = false;
if (n < 0)
{
isReciprocal = true;
n = - n;
}
int k = n / 2;
int l = n - 2 * k;
double p1 = pow(x, k);
double p2 = pow(x, l);
return isReciprocal == true ? (1 / (p1 * p1 * p2)) : (p1 * p1 * p2);
}
}
No comments:
Post a Comment