递归算法: x->y z 为临时塔 void move(unsigned int x, unsigned int y) { printf("%d->%d,", x, y); } void TowersOfHanoi(int n, int x, int y, int z) { if (n > 0) { TowersOfHanoi(n-1, x, z, y); move(x,y); TowersOfHanoi(n-1, z, y, x); } } 非递归算法: x->z y 为临时塔 struct HANOI_NODE { int n; unsigned int x, y, z; }; void move(unsigned int x, unsigned int y) { printf("%d->%d,", x, y); } void Hanoi_1(const HANOI_NODE& h) { Stack<HANOI_NODE> s; HANOI_NODE v(h); while(v.n > 0 || !s.IsEmpty()) { if(v.n > 0) { s.Add(v); --v.n; swap(v.y, v.z); } else { s.Delete(v); move(v.x, v.z); --v.n; swap(v.x, v.y); } } }