Recursive string reverse function
While this is recursive, it entirely misses the point.  As the while loop will only ever execute once (because the function it calls only returns when i &lt; j it could just as well have been an if, and thus all you've got is tail-recursion.

What you have is equivalent to the following, but impossible to call twice and maybe less efficient:

void reverse(char s[])
{
    int i = 0, j = strlen(s)-1;
    int c;
    while (i &lt; j) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
        i++;
        j--;
    }
}


That's obviously not recursive.  The way you'd do it recursively is always swap the outer two characters of the string and then pass pointers to the beginning and end of a substring along.

Apart from that, you're initialising j but not i, which makes little sense: both will be 0 initially anyway, so at least be consistent.  You're also not using MAXLINE, so you might as well get rid of it (if C allows it).  You're also not checking for a NULL being passed in.