Recursion should be avoided as much as possible and only used when it makes sense because it is computationally expensive. For each function call you make there is so much additional overhead done that it just doesn't make sense to use it for such a trivial exercise.
it is intended so, one of the arg has default value, so it runs.
the improvement it needs is polishing the diamond. and probably eliminating for loops.