Hanoi塔问题
来源:互联网 发布:js 遍历子节点 编辑:程序博客网 时间:2024/05/16 10:24
为了保证递归函数正确执行,系统需设立一个“递归工作栈”作为整个递归函数运行期间使用的数据存储区。每一层递归所需信息构成一个“工作记录”,其中包括所有的实参、所有的局部变量以及上一层的返回地址。
每进入一层递归,就产生一个新的工作记录压入栈顶。每退出一层递归就从栈顶弹出一个工作记录,则当前执行层的工作记录必须是递归工作栈栈顶的工作记录,称这个记录为“活动记录”,并称指示活动记录的栈顶指针为“当前环境指针”。
分治算法与软件设计的模块化方法类似。为了解决一个大的问题,将一个规模为n的问题分解为规模较小的子问题,这些子问题相互独立并且和原问题相同。分解这些子问题,最后将各个子问题的解合并到原问题的解。子问题与原问题类似,可以递归的使用分治策略解决。
Hanio(n, x, y, z)问题分成三个子问题:
问题1:Hanio(n - 1, x, z, y)
将x柱上的n - 1个圆盘借助Z柱移到Y柱上,此时X柱上只剩下第n个圆盘
问题2:Move(n, x, z)
将X柱上的第n个移动到Z柱
问题3:Hanio( n -1, y, x, z)
将Y柱上的n - 1个圆盘借助X柱移动到Z柱上
n ==1时可以直接求解
#include <iostream>using namespace std;//移动盘子void Move(int n, char x, char y){ cout << "移动 " << n << " 号盘子" << "从 " << x << " 柱到" << y << " 柱" << endl;}//递归调用void Hanoi(int n, char x, char y, char z){ if(n == 0) cout << "There is no dish!" << endl; if(n == 1) { Move(1, x, z); }else { Hanoi(n - 1, x, z, y); Move(n, x, z); Hanoi(n - 1, y, x, z); }}int main(){ cout << "The Hanio n is :" << endl; int n; cin >> n; Hanoi(n, 'x', 'y', 'z'); return 0;}
- Hanoi双塔问题(hanoi)
- Hanoi塔问题
- Hanoi塔问题(C)
- 双色Hanoi塔问题
- 双色Hanoi塔问题
- Hanoi 塔问题
- Hanoi塔问题
- Hanoi双塔问题
- Hanoi塔问题
- Hanoi(汉诺)塔问题
- 数据结构-Hanoi塔问题
- Hanoi塔问题
- Hanoi(汉诺)塔问题
- Hanoi塔问题
- 双色Hanoi塔问题
- hanoi塔问题
- hanoi塔问题
- Hanoi塔问题
- 使用NSClassFromString
- poj1006
- mysql explain
- Bluetooth---BluetoothAdapter
- HTML5 新增JavaScript
- Hanoi塔问题
- 站长要学会与敌为友
- Java 动态规划求解0-1背包问题
- CentOS-6.3安装配置Nginx
- 串口同步传输与异步传输
- 关于百度知道的知识
- HDU 4333 Revolving Digits2012多校联赛第四场C题(扩展KMP+KMP)
- hdu 2034 人见人爱A-B
- Android google map api key的申请与使用(debug/release)