// 把n个盘子从1(a)号柱子借助2(b)号柱子移到3(c)号柱子
// 总共要移 2^n-1 次
#include <iostream>
using namespace std;
void Move(int &x, int &y) // 没有真正移动盘子,只是输出方案
{
cout << x << " --> " << y << endl;
}
void Hanoi(int n, int a, int b, int c)
{
if(n > 0) {
Hanoi(n - 1, a, c, b);
Move(a, c);
Hanoi(n - 1, b, a, c);
}
}
int main(void)
{
int num;
cout << "How many diskes?" << endl;
cin >> num;
Hanoi(num, 1, 2, 3);
return 0;
}
看到维基百科上的介绍,页面上出现了个谢尔宾斯基三角形,有待深究。
本文通过C++实现汉诺塔问题的求解过程,并详细解释了递归算法的应用。介绍了如何将任意数量的盘子从初始柱子移动到目标柱子,同时探讨了递归、自相似性和分形之间的联系。
1072

被折叠的 条评论
为什么被折叠?



