As its a recursive call- the calculate() method. It prints the string mentioned by you more than once. So you would have to move that print statement out of the calculate() method. May be you can call it in the main method.
As Mohammad said it, in your prg you had the sys out in a method that was recursively called, and it will be called for total months+1 times which is 4 in your case, this was the reason why you had it printed 4 times when you expected it to be printed only once.
But my output is after the recursive call. Once the condition is false, Then it come out of the if condition [the recursive call is inside the if], Then it should exectued once.
If I am wrong, Is there any limitation, that "After recursive call we should not keep any statements"?
The way recursion works is that, when a method calls itself recursively, the method invocation is kept on a stack each time the method is invoked (the parent method does not return as completed), once the recursive calls exit, then the method invocation completes itself from the stack , prior to the method completion or return the sysout gets printed, which is why you see the sysout printed the number of times the method was invoked.