1.应用
分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),二分查找,傅立叶变换(快速傅立叶变换),汉诺塔问题
2.汉诺塔问题
public static void main(String[] args) {
int[] arr = {1,1,2,2,33};
hanoiTower(3,'A','B','C');
}
public static void hanoiTower(int num,char a,char b,char c){
if (num == 1){
System.out.println("将第1个盘从"+ a +"移动到" + c);
}else {
//将上面的盘从a移动到c,移动过程中会经过b
hanoiTower(num - 1,a,c,b);
//将最下面的盘从a移动到c
System.out.println("将第"+ num +"个盘从" + a + "移动到" + c);
//将B塔的所有盘从b移动到c 移动过程会用到a
hanoiTower(num - 1,b,a,c);
}
}
结果
将第1个盘从A移动到C
将第2个盘从A移动到B
将第1个盘从C移动到B
将第3个盘从A移动到C
将第1个盘从B移动到A
将第2个盘从B移动到C
将第1个盘从A移动到C