C++面向对象程序设计——递归实现字符串的反序

C++面向对象程序设计

题目:用递归算法编写一个程序,实现字符串的反序。

#include<iostream>
#include<string.h>
using namespace std;
int opp_str(char *str, int n)
{
	static int m = 0;
	if (n <= m)
		return 1;
	char tmp = str[m];
	str[m++] = str[n];
	str[n] = tmp;
	return opp_str(str, n - 1);
}
int main()
{
	char str[100];
	gets_s(str);
	opp_str(str,strlen(str)-1);
	puts(str);
	return 0;
}

代码解释如下:

定义了一个内部静态变量m,并且初始化令m=0.

if函数体下面的三行代码和一般的交换函数概念相同,故不做解释。

在编写的递归函数中,实现了字符串的反序。需要注意的是,递归和循环一样其实都需要一个判别是否停止的条件。在这个递归函数中,假如字符串中需要排序的字符有8个。那第一轮递归是1号和8号交换顺序,然后2号(m)和7号(n)交换顺序,直到n小于m,比如4号和5号交换后的顺序是5(m)、4(n),此时递归已经结束了,你不能够把5、4的顺序再颠倒过来。

接下来是代码测试

测试一
输入任意,注意大小要小于定义的数组大小。可以看到,程序已经完美的达成了字符串反序这一目的。

最后,抛给大家一个问题。感兴趣的读者可以考虑一下。

其实我的代码已经比较精简了,但是在写的过程中我觉得还是有内容可以简化。这里m的定义是否是必须的?能否在递归函数的每一轮递归中,通过一个较好的逻辑表达代替掉m,从而实现更高的效率?

转载请声明作者:

北京理工大学-宇航学院-探测制导与控制技术-刘鹏飞
ID:翡翠的风吟

这门课程让我学到了很多细节,比直接看C++ primer plus的效率要高。并且老师也介绍了很多实用的方法,这让我实现大规模工程软件编程时,能够节省空间和提升效率,总的来说这门课选的不亏,但是和小学期一样依旧没有题目能让我花太多时间。所以,我还是比较期待课上能出一些比较有趣的算法题目。(平时在ROS上碰壁惯了,在这门课上找回了自信。)

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值