I got stuck on this problem, even after looking at answers, I could not follow algorithm. Following video really helped me understand it:

Here is my solution after watching this video:

```
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
var myPow = function(x, n) {
if (x == 0) return 0
if (n == 0) return 1
if (n < 0) {
x = 1/x
n = -1 * n
}
const half = myPow(x, Math.floor(n/2))
let ans = half * half
if (n%2 == 1) ans = x * ans
return ans
};
```