When recursion is explicit your task than you will need to use the
divide and conquer algorithm.
A possible solution may be that you call your swap function with the first and last char* of your string, check that their distance is greater than 1 (uneven case) than swap and
call recursive the function with the next swap pair.
void swap(char *first, char* last)
{
int diff = last - first;
if( diff > 1 ) {
swap(first + 1, last - 1);
}
char c = *first;
*last = *last;
*first= c;
}
I hope you understand the principle.