From dc209d744e8db39cf5a5f6eea59e4edda2051514 Mon Sep 17 00:00:00 2001 From: zlg Date: Mon, 22 Jul 2013 04:38:53 -0500 Subject: Solve Exercise 4-13: Recursive reverse() --- ch4/4-13_recursive-reverse.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 ch4/4-13_recursive-reverse.c diff --git a/ch4/4-13_recursive-reverse.c b/ch4/4-13_recursive-reverse.c new file mode 100644 index 0000000..85a5b91 --- /dev/null +++ b/ch4/4-13_recursive-reverse.c @@ -0,0 +1,48 @@ +#include +#include + +/* The C Programming Language: 2nd Edition + * + * Exercise 4-13: Write a recursive version of the function reverse(s), which + * reverses the string `s` in place. + * + * Answer: Much like the last exercise, the trick is in terminating your flow + * early and resetting state for the next string. + */ + +void reverse(char[]); + +int main() { + char foo[40] = "Learning C is fun and challenging."; + printf("Before: %s\n", foo); + reverse(foo); + printf(" After: %s\n", foo); + /* I don't know how to set a char array to another string... */ + char bar[30] = "Hello out there!"; + printf("Before: %s\n", bar); + reverse(bar); + printf(" After: %s\n", bar); + return 0; +} + +void reverse(char s[]) { + static int i = 0; + static int j = 0; + int c; + + if (j == 0) { + j = strlen(s) - 1; + } + + if (i < j) { + c = s[i]; + s[i] = s[j]; + s[j] = c; + i++; + j--; + reverse(s); + return; + } + i = 0; + j = 0; +} -- cgit v1.2.3-54-g00ecf