- 题目:要求实现打印汉诺塔问题。
- 算法分析:需要使用递归的方法实现该问题,要将n个盘子从a移动到c,首先可以将问题分为两部分:把n-1个盘子从a移动到b,然后把最后的盘子从a移动到c;然后分析b上的n-1个盘子:首先要把n-2个盘子从b移动到a,然后把最后的盘子从b移动到c。 以此类推。
- 伪代码:
// 把n-1个盘子从a移动到b
// 把最后一个盘子从a移动到c
// 把n-1个盘子从b移动到c
- 总结:本来只是能看懂代码,但是不了解过程以及递归的原理,经过调试,发现当一次递归终止返回后,将会返回到上一次调用原函数之后继续进行
C++ #include <iostream> using namespace std; void hannuota(int n, char a, char b, char c) { if (n == 0) return; else { hannuota(n - 1, a, c, b); // 把n-1个盘子从a移动到b cout << "n = " << n << ": " << a << " -> " << c <<endl; // 把最后一个盘子从a移动到c hannuota(n - 1, b, a, c); // 把n-1个盘子从b移动到c } } int main() { hannuota(3, 'A', 'B', 'C'); return 0; } |
源文件:D:\Rjun756\12_算法\220221_hannuota
汉诺塔小游戏
教学视频(狗头)