C语言:字符串翻转的递归方法

////编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中的字符串操作函数。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* reverse_string(char*str)
{
 if (*str)
 {
  char* start = str;
  char* end = start+strlen(str) - 1;
  char tmp = *start;
  *start = *end;
  *end = '\0';
  reverse_string(str + 1);
  *end = tmp;
 }
 return str;
}
int main()
{
 char str[10] = "abcd";
 
 printf("%s", reverse_string(str));
 system("pause");
 return 0;
}

字符串的反转的递归方法需要抛弃掉,平常思路下的反转方式。

首先我们整理下思路,要将字符串反转,需要将前面的字符调到后面去;

首先,我们将字符串的第一个字符变成最后一个字符,并将第一个字符存起来,将最后一个字符变成‘\0’;

比如:将ABCD反转

第一次递归:ABCD------>DBC'\0',将A存在tmp中,进行递归函数F(str+1)变成DBC'\0';

第二次递归:DBC'\0'------->DC'\0''\0',将B存在了tmp中,因为递归时传入的参数是str+1,所以首元素变成了B;

第三次递归:DC'\0''\0'------->D'\0'\0''\0',将C存在了tmp中。

因为接下来不满足if条件,所以递归开始返回,首先返回D然后依次返回CBA。

猜你喜欢

转载自blog.csdn.net/qq_43647265/article/details/86492106