汉诺塔-递归算法深入理解
2015-04-16 21:52
197 查看
汉诺塔算法就3个步骤:
第一,把a上的n-1个盘通过c移动到b;
第二,把a上的最下面的盘移到c;
第三,因为n-1个盘全在b上了。
所以把b当做a重复以上步骤就好了。不过,思考过程还是很痛苦的,难以理解。递归中会保存数据的好处在这里又得到体现。
递归算法真的是个神奇的东西,它会自己在栈中记录下以前的数据,可以按照以前的记录返回到起始点。([b]重点理解递归中局部变量的保存)[/b]
汉诺塔代码如下:
参考:http://www.cnblogs.com/ruofengzhishang/articles/1939444.html
第一,把a上的n-1个盘通过c移动到b;
第二,把a上的最下面的盘移到c;
第三,因为n-1个盘全在b上了。
所以把b当做a重复以上步骤就好了。不过,思考过程还是很痛苦的,难以理解。递归中会保存数据的好处在这里又得到体现。
递归算法真的是个神奇的东西,它会自己在栈中记录下以前的数据,可以按照以前的记录返回到起始点。([b]重点理解递归中局部变量的保存)[/b]
汉诺塔代码如下:
#include<stdio.h> void move(int n,char a,char b,char c) { if(n==1) printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从a移动到c else { move(n-1,a,c,b); //第n-1个要从a通过c移动到b printf("\t%c->%c\n",a,c); move(n-1,b,a,c); //n-1个移动过来之后b变开始盘,b通过a移动到c,这边很难理解 } } main() { int n; printf("请输入要移动的块数:"); scanf("%d",&n); move(n,'a','b','c'); }
参考:http://www.cnblogs.com/ruofengzhishang/articles/1939444.html
相关文章推荐
- to初学者:从汉诺塔问题深入理解递归算法思想
- 深入理解递归以及汉诺塔问题[数据结构]
- 深入理解递归算法
- 个人最容易理解的汉诺塔算法解析(递归算法),通俗易懂,强烈推荐
- 深入理解递归算法的调用过程
- 对于汉诺塔递归算法的理解
- 理解汉诺塔递归算法
- 深入理解递归算法
- 汉诺塔递归算法理解及实现
- 深入理解BootStrap Item4 -- 表格
- 深入理解linux启动过程
- 关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等) .
- 深入Android开发之--理解View#onTouchEvent
- 深入理解java虚拟机--第七章类加载
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的参数
- 三、基本组件(四)深入理解ContentProvider
- 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程
- 深入理解NTFS磁盘中共享资源权限设置
- 深入理解openstack网络架构(3)-----路由
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件 (转载)