#include <stdio.h>
char * find_end_of_string(char * str)
{
return *str ? find_end_of_string(str + 1) : str;
}
void do_reverse_string(char * a, char * b)
{
char tmp;
if (a < b) {
tmp = *a;
*a = *b;
*b = tmp;
do_reverse_string(a + 1, b - 1);
}
}
void reverse_string(char * str)
{
do_reverse_string(str, find_end_of_string(str) - 1);
}
int main() {
char odd[] = "abcde";
char even[] = "abcdef";
reverse_string(odd);
reverse_string(even);
printf("%s\n%s\n", odd
, even
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjaGFyICogZmluZF9lbmRfb2Zfc3RyaW5nKGNoYXIgKiBzdHIpCnsKICAgIHJldHVybiAqc3RyID8gZmluZF9lbmRfb2Zfc3RyaW5nKHN0ciArIDEpIDogc3RyOwp9Cgp2b2lkIGRvX3JldmVyc2Vfc3RyaW5nKGNoYXIgKiBhLCBjaGFyICogYikKewogICAgY2hhciB0bXA7CiAgICAKICAgIGlmIChhIDwgYikgewogICAgICAgIHRtcCA9ICphOwogICAgICAgICphID0gKmI7CiAgICAgICAgKmIgPSB0bXA7CiAgICAgICAgCiAgICAgICAgZG9fcmV2ZXJzZV9zdHJpbmcoYSArIDEsIGIgLSAxKTsKICAgIH0KfQoKdm9pZCByZXZlcnNlX3N0cmluZyhjaGFyICogc3RyKQp7CiAgICBkb19yZXZlcnNlX3N0cmluZyhzdHIsIGZpbmRfZW5kX29mX3N0cmluZyhzdHIpIC0gMSk7Cn0KCmludCBtYWluKCkgewogICAgY2hhciBvZGRbXSA9ICJhYmNkZSI7CiAgICBjaGFyIGV2ZW5bXSA9ICJhYmNkZWYiOwogICAgCiAgICByZXZlcnNlX3N0cmluZyhvZGQpOwogICAgcmV2ZXJzZV9zdHJpbmcoZXZlbik7CiAgICAKICAgIHByaW50ZigiJXNcbiVzXG4iLCBvZGQsIGV2ZW4pOwogICAgCiAgICByZXR1cm4gMDsKfQ==