汉诺塔问题-递归
来源:互联网 发布:电话黄页怎么关闭网络 编辑:程序博客网 时间:2024/06/06 00:26
问题描述:将A柱上的n个圆盘移动到C柱
代码:
long cnt;//count,用来记录移动的次数,因为是全局变量,所以cnt已经被初始化为0void hanoi(int n,char a,char b,char c)//表示有n个圆盘要从a柱移动到c柱,b柱作为辅助柱{ if(n==1)//作为hanoi(n-1,a,c,b);(与hanoi(n-1,b,a,c);)的边界条件,**前几个**圆盘已经被移动到了c(a)柱上,现在只需要将a(b)柱上的**最后一个圆盘**移动到b(c)柱上 { cnt++; printf("第%d次,%c柱-->%c柱\n",cnt,a,c);//注意此a,c非彼a,c } else//不断通过递归来缩小问题规模(下面的注释是从整体上考虑的,不解释更深层的递归,因为每个递归结构执行的操作本质上都是一样的) { hanoi(n-1,a,c,b);//将这n-1个圆盘看做一个整体,从A柱移动到B柱,C柱作为辅助柱 { cnt++; printf("第%d次,%c柱-->%c柱\n",cnt,a,c);//将最后的盘子从A柱移动到C柱 } hanoi(n-1,b,a,c);//再将这n-1个盘子从B柱移动到C柱,A柱作为辅助柱 }}int main(){ int n; scanf("%d",&n); hanoi(n,'A','B','C'); return 0;}
算法描述:
①代码来自《程序员的数学思维修炼》一书,更详细的解释可以在这上面找到。
②请细细理解代码中加粗的内容,体会递归的思想。
③当要考虑更深层的递归时,将大写字母换成小写字母(如:printf(“第%d次,%c柱–>%c柱\n”,cnt,a,c);//将最后的盘子从A柱移动到C柱–printf(“第%d次,%c柱–>%c柱\n”,cnt,a,c);//将最后的盘子从a柱移动到c柱→),A,B,C是不变的,而a,b,c的值是变化的
阅读全文
0 0
- 递归问题,汉诺塔问题
- 递归解决汉诺塔问题
- 递归求解汉诺塔问题
- 汉诺塔问题详解 (递归)
- 汉诺塔问题 递归
- 汉诺塔问题,递归
- 汉诺塔问题递归解法
- 递归实现汉诺塔问题
- 汉诺塔问题(递归)
- 汉诺塔问题详解 (递归)
- 递归实现汉诺塔问题
- 递归_汉诺塔问题
- 递归--汉诺塔问题
- 汉诺塔问题递归算法
- 递归算法-汉诺塔问题
- 递归算法--汉诺塔问题
- 递归实现汉诺塔问题
- 经典递归问题--汉诺塔
- A. UCloud 机房的网络搭建
- 编译ROS程序包(四)
- uva 1625 Color Length (dp)
- sar命令
- Rsyslog日志的类型和级别
- 汉诺塔问题-递归
- python的空格和tab混淆而报错
- 集群环境下的session问题
- RISC-V学习第一篇
- java中静态方法中调用非静态方法
- 2017计蒜客第五场初赛 UCloud 的安全秘钥(困难)(哈希算法)
- Python之转置(容易忽略)
- c语言入门:排序算法
- python 获取一个值在某个区间的指定倍数的值