/** * Fast Powering Algorithm. * Recursive implementation to compute power. * * Complexity: log(n) * * @param {number} base - Number that will be raised to the power. * @param {number} power - The power that number will be raised to. * @return {number} */ export default function fastPowering(base, power) { if (power === 0) { // Anything that is raised to the power of zero is 1. return 1; } if (power % 2 === 0) { // If the power is even... // we may recursively redefine the result via twice smaller powers: // x^8 = x^4 * x^4. const multiplier = fastPowering(base, power / 2); return multiplier * multiplier; } // If the power is odd... // we may recursively redefine the result via twice smaller powers: // x^9 = x^4 * x^4 * x. const multiplier = fastPowering(base, Math.floor(power / 2)); return multiplier * multiplier * base; }