“汉诺塔”算法
题目:汉诺塔:三根杆子a、b、c,a杆由下到上按照从大到小的顺序穿了n个碟子,要求将n个碟子从a杆全部移动到c杆,移动结束后,碟子仍然按照由下到上从大到小的顺序排列,每次只能移动一个碟子,且小碟子不能放在大碟子下面。程序的每一行输出应该为:
moving disk x from pole i to pole j
其中,x是碟子的编号,从1开始一直到n,编号小的碟子是小碟子,i、j是杆的编号,为a、b或c
看了一些帖子,发现有一帖子说明特别简单易懂。于是引用了他博文的图片进行学习。
图中看出,只要抽象出主要的三步就能化繁为简。这刚好印证了递归的精华所在,如果不使用递归,是很难实现的。很多人说递归很难,其实递归是帮助我们简化问题。
- A柱子把”共n-1”个盘借助C盘移动到B盘,完成一个大过程
- A柱子把剩下的”第n”个盘直接移动到C盘,完成一个大过程
- B柱子上的”共n-1”个盘借助A移动到C盘,又完成一个大过程
重复上面的大过程直至只剩下一个盘,于是就到了递归的结束条件。
1 | package main |
1 | Result |