| 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 |
| 这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… |
| |
| # 解决的问题 |
| 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔 |
| |
| 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题 |
| 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题 |
| 合并:将各个子问题的解合并为原问题的解 |
| public class Hanoitower { |
| |
| public static void main(String[] args) { |
| hanoiTower(10, '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 { |
| |
| |
| hanoiTower(num - 1, a, c, b); |
| |
| System.out.println("第" + num + "个盘从 " + a + "->" + c); |
| |
| hanoiTower(num - 1, b, a, c); |
| } |
| } |
| |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术