我很难理解这个反向函数是如何工作的。我已经尝试在纸上一步一步地弄清楚代码的作用,但这对我来说没有意义。我对代码所做的最好(尽管很粗略)的解释是:
http://s7.postimg.org/632xhovwr/recursion_confusion.png
#include <stdio.h>
#include <string.h>
#define MAX 1000
void reverse(char s[]);
main()
{
char str[] = "remotes";
printf("Before: %s\n",str);
reverse(str);
printf("After: %s\n",str);
system("Pause");
return 0;
}
void reverse(char s[])
{
static int i = 0, n;
char c = s[i];
if (c != '\0') {
++i;
reverse(s);
s[n-i] = c;
--i;
}
else {
n = i;
}
}
通常,当递归是代码的最后一步时,递归函数没有问题,因为您应用递归直到某些终止条件和某种向后级联。但是当递归调用之前和之后有代码时,它会让事情变得更加混乱。