这和x ^ n == x *(x ^(n-1))完全相同的原则:为x ^(n / 2)和(…)^ 2插入递归函数,但确保你对于n == 2(因为2也是偶数)进入一个无限递归:
if (n % 2 == 0 && n > 2)
return power(power(x, n / 2), 2);
}
或者,您可以使用中间变量:
if (n % 2 == 0) {
double s = power(x, n / 2);
return s * s;
}
我可能只处理2作为一个特殊的情况下 – 避免“和”条件和额外的变量:
public static double power(double x, int n) {
if (n == 0) return 1;
if (n == 1) return x;
if (n == 2) return x * x;
if (n % 2 == 0) return power(power(x, n / 2), 2);
return x * (power(x, n - 1));
}
P.S。我认为这应该工作,太:)
public static double power(double x, int n) {
if (n == 0) return 1;
if (n == 1) return x;
if (n == 2) return x * x;
return power(x, n % 2) * power(power(x, n / 2), 2);
}