I thought every shell that is sh compatible would fork a while, and a for loop, as a matter of fact any loop into a sepearate process.
This comment however reminds me of some behaviour of bash 2.03 or earlier, where this behaviour was flawed, if you suddenly changed execution path during a recursion in a shell script. Sorry I can't describe it better, and that bash version, that was before 2.03 is long gone now!