Thinking Recursively with Java