1.分儿治之,将复杂的问题分解成简单的问题进行处理
2.基本步骤
1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
2)解决:若子问题规模较小而容易解决则直接解决,否则递归的节解各个子问题
3)合并:将各个子问题的解合并为原问题的解
3.举例说明
汉诺塔圆盘,A到C,大的不能在小的上面,中间有个B
分析过程只有一个在A,则直接挪到C
有两个在A,则把上面第一个挪到B,把下面一个挪到C,再把B上的挪到C
得出结论:假设有多个n,我们把上面的n-1个看成一个整体,把它从A挪到B;再将第n个挪到C,也就是只剩一个打印出来;最后将n-1从B挪到C上
代码实现:
package com.hy.tenalgorithm;
/**
* @author hanyong
* @date 2020/7/9 22:46
*/
public class Hannoitower {
public static void main(String[] args) {
hannoiTower(5, ‘A‘, ‘B‘, ‘C‘);
}
public static void hannoiTower(int i, char a, char b, char c) {
if (i == 1) {
System.out.println("第1个盘从" + a + "=>" + c);
} else if (i >= 2) {
//将上面i-1的放到b上
hannoiTower(i - 1, a, c, b);
//再将a的最下面一个放到c上,最后一个直接挪到c,输出一句话即可
System.out.println("第" + i + "个盘从" + a + "=>" + c);
//最后将b上的放到c上
hannoiTower(i - 1, b, a, c);
}
}
}
原文:https://www.cnblogs.com/yongzhewuwei/p/13277150.html