Это делает для маленькой (ish) рекурсивной функции и работает, сохраняя значения на пути вниз по стеку и увеличивая указатель на начало строки (* s) на пути назад (возврат).
Умно выглядящий код, но ужасный с точки зрения использования стека.
#include <stdio.h>
char *reverse_r(char val, char *s, char *n)
{
if (*n)
s = reverse_r(*n, s, n+1);
*s = val;
return s+1;
}
int main(int argc, char *argv[])
{
char *aString;
if (argc < 2)
{
printf("Usage: RSIP <string>\n");
return 0;
}
aString = argv[1];
printf("String to reverse: %s\n", aString );
reverse_r(*aString, aString, aString+1);
printf("Reversed String: %s\n", aString );
return 0;
}