Jason:
Of course you're right! In reality, I would never have used recursion as I did above for all the reasons you've stated - overhead, complexity, etc. I chose it as an example of recursion because it's extremely simple, not because it's a problem well suited to a recursive solution.
I can only think of two real world situations where I've used recursion because I felt it made sense to do so. Once was a directory listing as someone else has already mentioned.
The other (this was C++ mind you, not Java, but it matters not) was a program that given a 2-D maze and a stating point would give insructions on how to navigate to any other point. How I solved the problem was to make a method that moved out in space in each cardinal direction and then called itself recursively until it hit a wall. Eventually, one of the method calls would find the point and then return the directions to get there. All the other method calls would die on the vine.
It worked for mazes that were as big as 100,000 by 100,000 squares, and I always thought that it was amazing since it was a feat that no human could do by hand in any reasonable time frame.
----------------------------------
Arsin Delve,
SCJP