Thanks Dave Tolls,
You're right but I had to sit down and know why and how you were right.
What I was forgetting is that each method has its own local variable which is stored in its stack frame on the stack - until the method returns. So, in recursive calls, there's a whole load of local variable of type
String line each in its own stack frame corresponding to its own recursive method.
When finally the base case becomes true, the last recursion returns, setting off a whole cascade of returns.
I'm a visual learner so I've done the following diagram to help any others who like me who were bewildered - click on link:
https://drive.google.com/open?id=0B8OWbv_QuY22Z3JBdk90UzAxM1E
As I said I was self-studying a series of lectures - no wonder then that the previous lecture spent a lot of time talking about static storage, stacks and heaps - it all fits in.
Thank you David for setting me off on understanding the nitty-gritty of this.