分治算法的基本步骤:
1.分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
2.解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;
3.合并:将各个子问题的解合并为原问题的解。
汉诺塔代码:
package Algorithm.dac;
public class Hanoitower {
public static void main(String[] args) {
hanoiTower(5,'A','B','C');
}
/**
* 使用分治算法实现汉诺塔的移动
* @param num 表示有多少个盘
* @param a 第一个柱子
* @param b 第二个柱子
* @param c 第三个柱子
*/
public static void hanoiTower(int num, char a, char b, char c) {
if (num == 1) {
System.out.println("第1个盘从 "+ a + "->" +c);
} else {
hanoiTower(num - 1, a, c, b);
System.out.println("第" + num + "个盘 " + a + "->" + c);
hanoiTower(num - 1, b, a, c);
}
}
}