Once main() have called itself many times, it will crash for stack overflow.
Stack memory isn't so big.
Stick with do/while.
Let me write you the reason:
Say you have like 32 bytes of stack memory, just as an example:
A '0' means an unused byte. An '1' means an used byte.
You enter main, the function call requires two 32-bit parameters:
You want to store a variable.
Say we store two 32-bit integers.
You do another call to main(), so it's 32-bit of parameters and another 32-bits of variables.
You can see how, after some time, the stack fills itself.
The stack isn't this little, but you should use a good use of it.
Using do/while, you will reuse the same stack over and over again.