汉诺塔是一个经典的递归问题
实际上每次只需要考虑最下面的盘子,和除最下面以外所有的盘子(递归)
//汉诺塔 public class HanioDemo { public static void main(String[] args) { char from = 'A'; char mid = 'B'; char end = 'C'; HanioDemo.hanio(3, from, mid, end); } /** * * @param n n个盘子 * @param from 开始的柱子 * @param mid 中间的柱子 * @param end 目标柱子 * 汉诺塔问题实际上就考虑两种情况:只有一个盘子,和只有除最下面一个盘子以外的所有盘子 */ public static void hanio(int n, char from, char mid, char end) { if (n == 1) { System.out.println("把第1个盘子从" + from + "移动到" + end); } else { // 先把除了最下面的盘子以外的n-1个盘子移到中间的柱子 hanio(n - 1, from, end, mid); // 把最后一个盘子移到目标柱子 System.out.println("把第" + n + "个盘子从" + from + "移动到" + end); // 然后借助第一个柱子,把中间柱子上的盘子移到目标柱子 hanio(n - 1, mid, from, end); } } }