Simple worked example of Anton's suggestion:
void reverse_rec(char *begin, char *end)
{
if (begin < end) {
char swp = *begin;
*begin = *end;
*end = swp;
reverse_rec(begin+1, end+1end-1);
}
}
void reverse(char s[])
{
if (s)
reverse_rec(s, s+strlen(s)-1);
}
Note that you don't need a while, because recurse_rec stops recursing when begin >= end.