Do recursive algorithms generally perform better than their for-loop counterpart?
The answer will depend on the compiler.  As @vonbrand wrote, "Given a good enough compiler, you might even get the very same object code."  In particular, good compilers will do tail-call elimination.  In some cases this can effectively transform the code into a for-loop.  Your example looks like a good example of an instance where this could happen.

As @vonbrand says, "And unless circumstances are exceptional, your time is much more valuable than the computer's, so think first in terms of ease of writing/understanding the program".  Or, to quote Tony Hoare and Donald Knuth: "Premature optimization is the root of all evil."  To this I'd add, focus first on algorithm and data structure improvements (where one can often make the biggest improvements) and on user needs: and then if performance of this particular part of the code is really critical, try both a loop and recursion and measure.  Don't rely on your intuition; measure.