基本思路:
为了提高效率,计算指数可以通过以下公式进行递归:
a
n
=
{
a
n
/
2
⋅
a
n
/
2
n
为
偶
数
a
(
n
−
1
)
/
2
⋅
a
(
n
−
1
)
/
2
⋅
a
n
为
奇
数
{{\text{a}}^{n}}=\left\{ \begin{matrix} {{\text{a}}^{n/2}}\cdot {{\text{a}}^{n/2}} & \text{n}为偶数 \\ {{\text{a}}^{(n-1)/2}}\cdot {{\text{a}}^{(n-1)/2}}\cdot a & \text{n}为奇数 \\ \end{matrix} \right.
an={an/2⋅an/2a(n−1)/2⋅a(n−1)/2⋅an为偶数n为奇数
提示:可以通过右移运算符代替除以2,用位与运算符代替求余运算符来判断奇偶,位运算效率比乘除取余要快。
以下为解答:
public double Power(double base, int exponent) {
if (base == 0) {
return 0;
}
double result = powerWithNonNegativeExponent(base, Math.abs(exponent));
if (exponent < 0) {
result = 1.0 / result;
}
return result;
}
private double powerWithNonNegativeExponent(double base, int exponent) {
if (exponent == 0) {
return 1;
} else if (exponent == 1) {
return base;
}
double result = powerWithNonNegativeExponent(base, exponent >>> 1);
result = result * result;
if ((exponent & 1) != 0) {
result = result * base;
}
return result;
}