汉诺塔问题--递归实现
来源:互联网 发布:魏强斌 知乎 编辑:程序博客网 时间:2024/05/20 18:47
问题描述:
有一个梵塔,塔内有三个座A,B,C,A座上有若干个盘子,盘子大小不等,大的在下面,小的在上面。
目标:将A座上的盘子移动到C座上。
移动过程中可以借助B座,但每次只允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
问题分析:
当要移动n 个盘子时,先移动A上的n-1个盘子到B上,再移动第n个盘子到C上;
当要移动n -1个盘子时,先移动A上的n-2个盘子到B上,再移动第n-1个盘子到C上;
当要移动n -2个盘子时,先移动A上的n-1-3个盘子到B上,再移动第n-2个盘子到C上;
。
。
。
当要移动2个盘子时,先移动A上的1个盘子到B上,再移动第2个盘子到C上;
当要移动1个盘子时,直接移动第1个盘子到C上;
所以可以采用递归的算法:
结束条件为:当要移动1个盘子时,直接移动第1个盘子到C上
#include <iostream>#include <stdio.h>using namespace std;void move(char x, char y){printf("%c------>%c\n", x, y);}void hano(int n, char one, char two, char three){if (1 == n){move(one, three);}else{hano(n - 1, one, three, two);move(one, three);hano(n - 1, two, one, three);}}int main(){int m;printf("input the number of disks:");cin >> m;printf("The step to moving %d diskes:\n", m);hano(m, 'A', 'B', 'C');return 0;}
0 0
- 递归实现汉诺塔问题
- 递归实现汉诺塔问题
- 递归实现汉诺塔问题
- 递归实现汉诺塔问题
- 汉诺塔问题递归实现
- 汉诺塔问题--递归实现
- 递归实现汉诺塔问题
- 递归和非递归实现汉诺塔问题
- 汉诺塔问题的递归实现
- 汉诺塔问题的递归实现
- Java 递归实现汉诺塔问题
- 汉诺塔问题的递归实现
- 汉诺塔问题(递归实现)
- java 递归实现汉诺塔问题
- 经典汉诺塔问题:分别用递归和非递归实现
- 汉诺塔、反向输出问题--利用递归实现
- 汉诺塔问题C++的递归实现 [
- 汉诺塔问题的递归实现(扩展)
- springMVC 类型转换
- 一种排序
- swift中UILable的使用
- JavaScript中盲点
- springMVC 格式化
- 汉诺塔问题--递归实现
- android padding margin和html padding margin的区别
- 14、Fragment
- springMVC 数据验证
- Socket在Android中的用法
- bzoj 3833 [Poi2014]Solar lamps 树套树 splay
- openfire 拦截servlet请求代码解析
- org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.ap解决方
- contOS7(Linux)安装maven