C/C++程序设计常用算法——递归法

文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。


资料仅供学习交流使用。
作者:Aliven888

1、简述

  程序设计的关键就是算法,算法简单来说就是程序设计时问题解题步骤或者数据数据的流程。这里我们将介绍以下几种常用的算法:迭代法、穷举法、递推法、递归发、回溯法、贪婪法、查找算法、排序算法

本章节主要介绍递归法

2、递归法

递归:简单来说,函数的递归调用是指一个函数在它的函数体中直接或者间接自己调用自己。它是设计和描述算法的一种有力工具,它在复杂算法的描述中经常被采用;能采用递归算法的通常都有这样的特征:可以把复杂的逻辑按照一定的逻辑简化成一个简单算法的重复,当简化到规模最小时,就能得到答案了。

特点:

  由于递归函数引起的递归调用,并且可能会有一系列的重复计算,所以递归算法的执行效率相对比较低。

代码实例:

//经典的汉诺塔问题:有若干个盘子由大到小一次放在塔A上,此时借助塔B,将盘子全部移到塔C上。
//条件:一次只能移动一个盘子,而且移动的过程中,大的盘子不能放小的盘子上面。

//题目分析:
// 递归的思路 :由最后的答案,反着一步步推理解题思路
//1、将n-1个盘子从塔A(借助于塔C)移动到塔B上,此时塔A上只有做大的那个盘子
//2、将最大的盘子由塔A移动到塔C上。
//3、将塔B上剩余的n-1个盘子(借助于塔A)移动到塔C上 —— 任务完成

//eg:
int step = 0;  //移动步数
void move(int n, char a, char b, char c)
{
	if (n > 0)
	{
		move(n - 1, a, c, b);  //塔A借助于塔C全部移动到塔B上
		step++;
		cout << "第" << step << "步:移动" << a << " ---> " << c << endl;  //移动最大的盘子
		move(n - 1, b, a, c);  //塔B借助于塔A全部移动到塔C上——成功。
	}
}

void main()
{
	move(4, 'A', 'B', 'C');
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值