字符串逆序(递归实现)

简介: 字符串逆序(递归实现)

编写一个函数 reverse_string(char * string)(递归实现)


实现:将参数字符串中的字符反向排列,不是逆序打印。


先介绍函数递归的概念


简单来说就是,函数自己调用自己的过程,简称函数递归


实现函数递归,有两个条件


1,存在限制条件。
2,每次递归之后,越来越接近限制条件。


根据题目要求,可知通过函数 reverse_string(char * string),

先将整个字符串逆序,然后再打印

如果没有理解题目要求,可能会逆序一个字符就立马打印,这个思考方式还是有所欠缺的


接下来就来思考如何去实现这个函数


fcd9c73bcd969f4d51327981d6f209d2_b8a8eeffaec04bf281818dee2e0fcba4.png


代码如下


#include<stdio.h>
int my_strlen(char* str)
{
  if (*str != '\0')
  {
  return 1 + my_strlen(str + 1);
  }
  else
  {
  return 0;
  }
}
void Reverse(char* str)
{
  int len = my_strlen(str);
  //1.将第一个字符存放到临时创建的字符变量中
  char c = 0;
  c = *str;
  //2.将最后字符串最后一个字符存放到第一个字符的位置
  *str = *(str + len - 1);
  //3.将字符串中最后一个字符设置为'\0'
  *(str + len - 1) = '\0';
  //4.逆序中间的字符串(从第二个字符到倒数第二个字符)
  if (my_strlen(str + 1) > 1)
  {
  Reverse(str + 1);
  }
  //5.将临时创建的字符变量里存放的第一个字符,存放到字符串
  //最后一个字符的位置
  *(str + len - 1) = c;
}
int main()
{
  char ch[] = "abcdef";
  printf("逆序前:%s\n", ch);
  Reverse(ch);
  printf("逆序后:%s\n", ch);
  return 0;
}


运行结果

066419220988a00dc5d260d4045704a1_125be5bfbdbd419287da548bbb8af3fe.png


目录
相关文章
|
3月前
|
存储 算法 Java
|
1月前
字符串逆序
字符串逆序
16 2
|
机器学习/深度学习
递归实现 八皇后问题(*)
递归实现 八皇后问题(*)
139 0
递归实现 八皇后问题(*)
递归和非递归分别实现求第n个斐波那契数
递归和非递归分别实现求第n个斐波那契数
60 0
|
算法 Java
快速幂(非递归)
快速幂(非递归)
字符串逆序(递归和非递归实现)
给连两个指针,left放在字符串左侧,right放在最后一个有效字符位置。 交换两个指针位置上的字符
|
C++
C++解决汉诺塔问题(递归实现)
C++解决汉诺塔问题(递归实现)
428 0
C++解决汉诺塔问题(递归实现)
|
存储 C语言
字符串逆序不一样的解法(递归)
字符串逆序不一样的解法(递归)
105 0
字符串逆序不一样的解法(递归)
|
机器学习/深度学习 人工智能 算法
『递归』汉诺塔和全排列
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下: 第1步:1号盘从A柱移至B柱第2步:2号盘从A柱移至C柱
221 0