How to do tail recursion without growing the stack?

The Level computes the virtual level and is (thus) also increased on last calls. That is why, when a stack trace is dumped, the indicated levels typically have missing levels: due to a last call the frame(s) in between are missing.

To verify LCO does its job you can use statistics(localused, Bytes)