You need to do it because compilers are dumb. They can't see complex logic that will always result in a return path.
I'm guessing you're getting a "warning" that "control may reach end of non-void function"? It's an error because a compile flag says treat all warnings as errors. It's also bad practice not to have the return because nobody can predict what happens in unpredictable or error scenarios.
Having said that, the recursion is flawed. Say that the code passes into the else clause. It will call itself again, we'll call that the child. Say that the child returns 'P' to the parent. What happens next?
The parent doesn't do anything at all with the result, so nothing gets returned to the original call - the code is broken.
THIS is why there needs to be a return. ;-)
Review these two sites for more info, particularly the part on recursive returns (the first link):
If this answers your question, please click on the check mark to accept. Let's keep up on forum maintenance. ;-)