can recursion always be replaced by iteration?
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.