练习4-13 编写一个递归版本的reversed(s)函数,以将字符串s倒置;
递归顺序如图, 有一个含四个字符的字符串,递归到最底层的时候先互换cd两个字符,然后回到上一层,交换bdc三个字符,然后再回到上一层,交换adcb四个字符,此时字符串已完成逆序。
虽然到第四章还没有学到指针,但是个人感觉不得不用指针完成此问题。
#include <stdio.h>
void recursion_reverse(char *s, int len);
int str_len(char *s);
int main()
{
int len;
char s[10] = "abcdefgh";
len = str_len(s);
recursion_reverse(s, len);
printf("%s\n", s);
return 1;
}
int str_len(char *s)
{
char *p = s;
while (*p != '\0')
p++;
return p - s;
}
void recursion_reverse(char *s, int len)
{
int temp, i;
if (*(s + 1) != '\0')
{
recursion_reverse(s + 1, len - 1);
}
if (len > 1)
{
temp = *s;
for (i = 0; i < len - 1; i++)
*(s + i) = *(s + i + 1);
*(s + len - 1) = temp;
}
return;
}