八大算法思想(二)------------------递归算法
一,充分利用自己的递归算法思想
1,递归算法的基础
2 ,在使用递归算法时,注意一下几点 (1)递归是在过程或 函数中调用自身的过程
(2)在使用递归策略时,必须有一个明确的递归结束条件,这称为递归出口。
(3)递归算法通常显得很简洁,但是运算效率较低,所以一般不提倡使用递归算法设计程序。
(4)在递归调用过程中,系统用栈来存储每一层的的返回点和局部变量。如果递归次数过多,则容易造成栈溢出,所以一般不提倡用递归算法设计程序。
3,实例----------汉诺塔问题:
一个庙里有三个柱子,第一个有64个盘子,从上往下盘子越来越大。要求庙里的老和尚把这64个盘子全部移动到第三个柱子上。移动的时候始终只能小盘子压着大盘子。而且每次只能移动一个。
1、此时老和尚(称为第1个和尚)他想:要是有一个人能把前63个盘子先移动到第二个柱子上,我再把最后一个盘子直接移动到第三个柱子,再让那个人把刚才的前63个盘子从第二个柱子上移动到第三个柱子上,我的任务就完成了,简单。所以他找了第2个和尚,让其:
① 你把前63个盘子移动到第二柱子上
② 在我自己把第64个盘子一道第三个柱子上后
③ 你把前63个盘子移动到第三柱子上
2、第2个和尚接了任务后和第1个和尚一样想:要是有一个人能把前62个盘子先移动到第三个柱子上,我再把最后一个盘子直接移动到第二个柱子,再让那个人把刚才的前62个盘子从第三个柱子上移动到第三个柱子上,我的任务就完成了,所以他也找了比他年轻的和尚叫他第3和尚,让其:
① 你把前62个盘子移动到第三柱子上
② 在我自己把第63个盘子一道第二个柱子上后
③ 你把前62个盘子移动到第二柱子上
3、第3个和尚接了任务,又把移动前61个盘子的任务依葫芦话瓢的交给了第4个和尚,等等递推下去,直到把任务交给了第64个和尚为止(估计第64个和尚很郁闷,没机会也命令下别人,因为到他这里盘子已经只有一个了)。
4、到此任务下交完成,到各司其职完成的时候了。完成回推了:
第64个和尚移动第1个盘子,把它移开,然后第63个和尚移动他给自己分配的第2个盘子。第64个和尚再把第1个盘子移动到第2个盘子上。到这里第64个和尚的任务完成,第63个和尚完成了第62个和尚交给他的任务的第一步。
从上面可以看出,只有第64个和尚的任务完成了,第63个和尚的任务才能完成,只有第2个和尚任务完成后,第1个和尚的任务才能完成。这是一个典型的递归问题。
/*************************************************************************************************************************
*文件说明:
* Fibonacci数列实现
*开发环境:
* Win10+VS2015+OpenCv3.2.0
*时间地点:
* 陕西师范大学.文津楼 2017.6.10
*作者信息:
* 李Sir
**************************************************************************************************************************/
#include<stdio.h>
#include<Windows.h>int main()
{void hanoi(int n,char one,char two,char three);int m;printf("input the number of diskes:");scanf_s("%d",&m);printf("the step to move %d diskes:\n",m);hanoi(m, 'A', 'B', 'C');system("pause");return 0;
}void hanoi(int n, char one, char two, char three)//将n个盘子从one座借助two座移动到three座
{void move(char x, char y);if (n == 1)move(one, three);else{hanoi(n - 1, one, three, two);move(one,three);hanoi(n-1,two ,one, three);}
}void move(char x, char y)
{printf("%c--->%c\n",x,y);
}
八大算法思想(二)------------------递归算法相关推荐
- 八大算法思想二——递推法
聪明一点的递推法 递推法:犹如稳重的老将,使用的就是"稳扎稳打"的策略,不断利用现有的信息推导出新的东西,在日常使用中有两种方法: 1,顺推法:从已知的条件出发,逐步推导得到解决问 ...
- 递归下降分析法的基本思想。_还不懂这八大算法思想,刷再多题也白搭!
各位朋友好久不见呢.最近由于刚入职,作为职场萌新,所以大部分时间都花在了工作上.因而也没有太多时间来写文章啦,这篇文章也是定题了许久,迟迟没有落笔.等之后工作慢慢稳定,业务熟练起来,文章更新频率就会高 ...
- 还不懂这八大算法思想,刷再多题也白搭!
各位朋友好久不见呢.最近由于刚入职,作为职场萌新,所以大部分时间都花在了工作上.因而也没有太多时间来写文章啦,这篇文章也是定题了许久,迟迟没有落笔.等之后工作慢慢稳定,业务熟练起来,文章更新频率就会高 ...
- 不懂这八大算法思想,刷再多题也白搭!
点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 来源:业余码农 算法和数据结构一直以来都是程序员的基本内功,可以说没有数据结构的基础建设和 ...
- 《数据结构与算法之二叉搜索树(Java实现)》
说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,能力有限,文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正.若 ...
- 希尔排序算法思想及代码
希尔排序 一.希尔排序算法思想 二.代码 一.希尔排序算法思想 希尔排序是特殊的插入排序,直接插入排序每次插入前的遍历步长为1,而希尔排序是将待排序列分为若干个子序列,对这些子序列分别进行直接插入排序 ...
- 数据结构笔记(二十九)--最小生成树(prim算法思想)
最小生成树(prim算法思想) 一.预知概念 直达:两顶点直接相连接 路径:两顶点之间可以有其他顶点,但最终两顶点是能够连接的 假如我们有四台电脑,怎样连接才能保证这四台电脑两两相互通信组成局域网呢? ...
- 《转》八大算法详细讲解
转自 http://blog.csdn.net/jobbofhe/article/details/51426934 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数 ...
- Algorithms_算法思想_递归分治
文章目录 引导案例 递归的定义 什么样的问题可以用递归算法来解决 递归如何实现以及包含的算法思 递归的公式 斐波那契数列代码实现 递归的时间复杂度和空间复杂度 递 与 归 递归的优化 优化方式一:不使 ...
最新文章
- matlab 显示3d频谱_matlab 关于频谱分析程序集锦
- 简单解决XP共享连接数10限制
- Alpha冲刺Day2
- [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式
- javascript 和 jq 的调试 用console.log() 函数
- 文娱打卡百强,重工智造升级,互联网进入“长沙时间”
- 笔记-项目合同管理-要约、承诺和要约邀请
- c语言第七章函数调用题库,c语言题库7-函数.doc
- python标准库之urllib, httplib, urllib2
- 使用threading模块实现多线程
- Oracle分页总汇
- VDO-SLAM 配置 2022 Ubuntu20.04
- java string 匹配次数_Java实现统计某字符串在另一个字符串中出现的次数
- 计算机学的是苹果系统,苹果电脑装windows7教程 苹果电脑装windows7方法
- 【AIOT】HumanCenteredSensing
- 小路工作室GHOST XP 2007典藏版(完美XP)
- 人人都可以用的项目管理工具,5分钟告诉你如何做好活动策划
- 利用 telnet 命令测试 SMTP 服务(QQ邮箱发邮件)
- 谷歌物联网操作系统Android Things揭开面纱
- chocolatey的安装与使用与chocolatey安装失败的解决方法
热门文章
- Java编码规范注意
- imageview获取宽高
- 基于JAVA+SpringBoot+Mybatis+MYSQL的进销存管理系统
- java中HashSet对象内的元素的hashCode值不能变化
- 折半枚举(双向搜索)
- 感悟----程序员需要养成的习惯
- python numpy loadtxt
- Javascript Array对象 sort()方法,记忆方法,方法扩展
- CSS-float详解,深入理解clear:both[转+部分原创]
- sharepoint2013用场管理员进行文档库的爬网提示没有权限,拒绝的解决方法