递归就是寻找重复子过程。递归的过程虽然与人脑思维逻辑不同,但符合计算机的执行流程,因此很常用。 递归特别适用于二叉树、链表等操作,这些数据结构本身的定义就含义递归性质。
1)终止条件 2)当前层逻辑处理 3)下钻 4)恢复当前层状态
1)不要人肉递归 2)找到最近最简方法,将其拆解为可重复解决的问题(寻找重复子问题) 3)数学归纳法思维
分治的本质就是递归,也是寻找最近重复子问题。 分治将当前问题拆分为多个重复子问题,依次递归执行子问题,然后合并子问题的解。
1)终止条件 2)处理当前层逻辑,拆分当前问题 3)解决子问题 4)合并子问题的解 5)恢复当前层状态
回溯法是采用试错的思想,尝试去分步解决一个问题。在分步解决的过程中,可能取消当前操作尝试其他可能。 回溯法一般通过递归来实现。 在最坏情况下,时间复杂度是指数级。
1)终止条件 2)选择一个操作,判断是否需要剪枝 3)递归调用下一步操作 4)撤销当前操作 5)循环执行第二步,直到遍历所有操作