Every recursive solution can be rewritten iteratively, and vice versa. So when should Use recursion? Use recursion when the problem has natural recursive structure: trees, nested structures, divide-and-conquer. The code mirrors the problem.
Use iteration When need efficiency. Iteration avoids call stack overhead. For factorial, a simple loop is faster than recursion. In competitive programming, deep recursion can cause stack overflow. Some problems limit stack size.
When in doubt, convert to iteration or increase stack size. For learning, start with recursion. It's often clearer. Once understand the solution, improve performance if needed.