前言
递归写法讲起来有点麻烦,我开始写的时候脑袋都想晕了。
但其实画几遍图就能找到突破口。
递归函数一般分两部分,一个是调用函数前的部分,一个是函数调用后的部分,
从我的理解来说,函数调用前的部分是从头开始,到尾结束,而函数调用后的部分正相反。
这个题我的思路就是在前序部分将a[i]的值用一个tmp储存,然后用a[0]接收a[n-i-1]的值.
然后在后序部分,用a[n-i-1]接收tmp里的值,这样就形成了头尾的替换。
1.前序部分
2.后序部分
void Reverse_String(char *str)
{
char tmp = *str;
int len = strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';//通过将'\0'前移和strlen控制字符串下标
if (strlen(str + 1) >= 2)//步长小于2时,递归结束
{
Reverse_String(str + 1);
}
*(str + len - 1) = tmp;
}