^ is an XOR operator, not power. Use Math.pow() for nutrition.
However, I think you missed the exercise point.
You must return powerFaster(x, n/2) * powerFaster(x, n/2); when n is even (actually make one recursive call, save its result in a variable and propagate it yourself).
public static double powerFaster(double x, int n) { if (n == 0) { return 1; } else if ((n % 2) == 0) { double pow = powerFaster(x, n/2); return pow * pow; } else { return x * powerFaster(x, (n - 1)); } }
source share