利用二叉树彻底弄懂[汉诺塔]递归原理
来源:互联网 发布:知豆高速没电了怎么办 编辑:程序博客网 时间:2024/06/04 18:44
大三了,还没实现过汉诺塔,今天实现了他。
以前一直用函数递归调用的方法一点一点的推,有时候还推得稀里糊涂。
在学完二叉树之后,又写了一遍汉诺塔的递归实现,仔细一看代码的结构,和二叉树的中序遍历一模一样,我恍然大悟。
在利用二叉树的时候,先以两个盘子的情况模拟,然后逐渐加多,这样,就可以得到满二叉树,树的一些性质我就不用多说了。
#include <stdio.h>/* 借助递归树这个工具来分析会有很高的效率。*//* 要求: 将A上的n个盘子移到C上(只有A,B,C三个柱子) 1.一次只能移一个。 2.小的只能再大的上面*/void hannuota(int n,char A,char B,char C){ /* 假设: 盘子编号:从上往下为1.2.3.4......n. 伪算法: 如果n=1 直接将A移到C 否则 先将A上的n-1个盘子借助C移到B 再将A上的第n个盘子移到C上 最后将B上的n-1个盘子借助A移到C上 */ if(n==1) printf("将编号为1的盘子直接从%c移到%c\n",A,C); else {//可以看出,以下几个步骤类似于二叉树的中序遍历步骤.(自己总结出来的*重点*,*重点*,*重点*,这样就比较好理解了) hannuota(n-1, A, C, B); printf("将编号为%d的盘子直接从%c移到%c\n",n,A,C); hannuota(n-1, B, A, C); }}int main (int argc, const char * argv[]){ char ch1 = 'A'; char ch2 = 'B'; char ch3 = 'C'; int n; printf("Please input the number of plates:\n "); scanf("%d",&n); hannuota(n,ch1,ch2,ch3); return 0;}
- 利用二叉树彻底弄懂[汉诺塔]递归原理
- 彻底弄懂递归[心得](实例:归并排序)
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂HTTP缓存机制及原理
- 彻底弄懂CSS+DIV
- 彻底弄懂欧拉路问题
- 彻底弄懂后缀数组
- 彻底弄懂二叉排序树
- 彻底弄懂后缀数组
- 彻底弄懂KMP
- 彻底弄懂 Unicode 编码
- 一句话弄懂常见二叉树类型
- 关于二叉树以及利用二叉树将递归转化为非递归
- Python 信号
- 财付通 第三方支付 即时到帐支付接口
- Android优化UI秘籍【zt】
- android 权限大全
- win7 用无线网络上网怎么共享一个无线出来
- 利用二叉树彻底弄懂[汉诺塔]递归原理
- Apache Solr:基于Lucene的可扩展集群搜索服务器
- Android 获取Root权限 详细图解
- 第三天
- 第四天
- HDU3998 Sequence 动态规划+最大流2011 Multi-University Training Contest 16 - Host by TJU
- 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询
- 一个跨平台的 C++ 内存泄漏检测器
- D3DXMatrixTranslation D3D中的平移函数