1. Halving the problem size at each step gives O(logn) time.
2. Squaring a value lets you compute powers exponentially faster than repeated multiplication.
3. Recursive solutions create call stacks of depth O(logn), which you can eliminate with iteration if space matters.