^ That.
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:
00000000000000000000000000000000 |
A '0' means an unused byte. An '1' means an used byte.
You enter main, the function call requires two 32-bit parameters:
11111111000000000000000000000000 |
You want to store a variable.
Say we store two 32-bit integers.
11111111111111110000000000000000 |
You do another call to main(), so it's 32-bit of parameters and another 32-bits of variables.
11111111111111111111111111111111 |
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.