Thinking Recursively With Java by Eric S. Roberts