递归实现字符串翻转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现字符串翻转相关的知识,希望对你有一定的参考价值。

编写一个函数reverse_string(char * string)

    实现:将参数字符串中的字符反向排列。

    要求:不能使用C函数库中的字符串操作函数。

  1. 非递归实现

void reverse(char *str)
{
	char *left = str;
	char *right = str + strlen(str) - 1;
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

2.递归实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char* reverse_string(char * string,int len);
	int i,LEN=0;
	char arr[]="abcd";
	LEN=strlen(arr);
	char ret[LEN];
	char *p=arr;
	for(i=0;i<LEN;i++)
		ret[i]=*(reverse_string(p,LEN));
	printf("%s\n",ret);
	system("pause");
	return 0;
}
char* reverse_string(char * string,int len)
{
	int static j=0;
	char s[len]="0";
	if(*string==‘\0‘)
		return s;
	else
	{
		s[len-j]=*string;
		j++;
		reverse_string(string++);
	}
}

递归优化:

int length(char *str)
{
	int count = 0;
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}
void reverse(char *str)
{
	int len = length(str);
	if (len== 0)
	{
		return;
	}
	else
	{
		char tmp = *str;
		*str = *(str + len - 1);
		*(str + len - 1) = ‘\0‘;
		reverse(1+str);
		*(str + len - 1) = tmp;
	}
}
int main()
{
	char arr[] = "bit-tech";
	reverse(arr);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

递归调用图如下技术分享

本文出自 “sunshine225” 博客,请务必保留此出处http://10707460.blog.51cto.com/10697460/1753594

以上是关于递归实现字符串翻转的主要内容,如果未能解决你的问题,请参考以下文章

C 语言字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )

华为OD机试真题Python实现翻转单词顺序真题+解题思路+代码(2022&2023)

C 语言字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )

Java面试题目-单链表翻转(递归+非递归实现)

翻转链表递归解法

C 语言字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 )