Bitwise reversing
The geek in me is clearly alive and strong. I found this post on reversing a string using bitwise XOR quite appealing.
Although really, it's not that different to storing a character and swapping them over (plus swapping the characters that way would be more 'obvious', which I think is always a feature of good code). The thing that makes a recursive function slow here is that you're building a new string. This function (and one where you swap characters) simply changes the string in-place. Plus it does it from both ends at once.
Personally I'd rather have the variables named better (instead of 'i' and 'len', why not use firstHalfCharPos and secondHalfCharPos, or something tediously long but descriptive like that?), but I do admire the 'fun' of the bitwise XOR, and it's a good way of demonstrating the principle of XOR.