算法思路:
1.如果只有一个金片,则把该金片从源移动到目标棒,结束。
2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒.
3.单纯对于有N个金片要挪动的步数求出, 可以使用递推方法,满足递推方程f(i) = f(i - 1) * 2 + 1.
1.如果只有一个金片,则把该金片从源移动到目标棒,结束。
2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒.
3.单纯对于有N个金片要挪动的步数求出, 可以使用递推方法,满足递推方程f(i) = f(i - 1) * 2 + 1.
- class hanoi
- {
- private int i = 0;
- public int I
- {
- get { return i; }
- set { this.i = value; }
- }
- //---------核心到代码----------
- internal void HanoiMove(int n, char a, char b, char c)
- {
- if (n == 1)
- {
- i++;
- Move(n, a, c);
- //Console.WriteLine("第{0}个:{1}-------->{2}", n, a, c);
- }
- else
- {
- HanoiMove(n - 1, a, c, b);
- i++;
- Move(n, a, c);
- //Console.WriteLine("第{0}个:{1}--------------->{2}", n, a, c);
- HanoiMove(n - 1, b, a, c);
- }
- }
- private void Move(int n, char a, char c)
- {
- Console.WriteLine("第{0}个:{1}-------->{2}", n, a, c);
- }
- }