Question: can recursion always be replaced by iteration?
Answer: Yes, using explicitly a stack (but recursion is far more pleasant to read, IMHO). In principle it is always possible to remove recursion and replace it with iteration in a language that has infinite state both for data structures and for the call stack. This is a basic consequence of the Church-Turing thesis.