八大算法思想(二)------------------递归算法
来源:互联网 发布:深圳索信达数据怎么样 编辑:程序博客网 时间:2024/05/17 03:24
一,充分利用自己的递归算法思想
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);}
- 八大算法思想(二)------------------递归算法
- 八大算法思想(二)------------------递推算法
- 八大算法思想(一)------------------枚举算法
- 八大算法思想
- 八大排序算法(二)
- 数据结构与算法(递归算法思想)
- 八大排序算法(二)希尔排序
- C++八大排序算法(二)
- 算法之递归思想
- Java-递归算法思想
- 递归算法思想
- 算法-递归思想
- 递归算法思想
- 递归算法思想
- 基本算法思想---递归
- 常用算法思想--递归算法
- 八大排序算法实战:思想与实现
- 八大排序算法实战:思想与实现
- Mybatis if test中字符串比较(内双外单)
- 2017年阅读书单(一)
- 洛谷 P1077 摆花
- git版本管理
- div里写if语句
- 八大算法思想(二)------------------递归算法
- React/React Native 的ES5 ES6写法对照表
- spring boot做OAuth2认证服务端
- 使用RedisDB,封装dll
- 彻底删除 本机上安装的服务程序 ,以删除apache为例子
- JAVA学习之 35-JAVA中的字符串知识点整理(二)
- Linux 自动同步时间
- 9.脚本语言知识总结
- 自从有了BigInteger,我再也不用担心要处理的数据有多大了