Replacing recursion with anything else is not easy, that is why it is such a powerful technique.
Read
this[
^] first, then come back here and read on.
To do a recursive function without recursion means remembering where you are, and coming back to exactly that point later. This is not simple at all, when you do not know the potential depth of the lists you are traversing.
Much better to do it with recursion: it is simple to set up and easy to understand.
"Yeah, too simple and easy to understand, powerful, just in some cases we can't replace it if we like simplicity, isn't it?
So what about my problem? Should I use recursion? Thank you so much!"
Yes. Think about it: a control contains a list of controls, so it is a naturally recursive structure. To process it without treating it as such is hugely complicating things beyond what is necessary.