- 递归不去想内部怎么实现的,直接拿来用就行了,这句话给了一种新的思路,不然一直想也不明白就卡住了
递归
递归基本概念
递归
:把大规模的问题不断变小,再进行推导的过程
何时适用递归
如果原问题可以分解成若干与原问题结构相同但规模较小的子问题时,往往可以用递归的方法解决
算法思想
- 要懂得如何将一个问题的规模变小
- 再利用从小规模得到的结合
- 结合当前的值或者情况,得出最终结果
通俗理解
- 把要实现的递归问题看成已经实现好的,
- 直接利用解决一些子问题
- 思考如何利用子问题的解以及当前面对的情况得出答案
与动态规划dp的关系
基本结构
function fn(n){
//第一步:判断输入或者状态是否非法
if(input/state is invalid){
return;
}
//第二部;判断递归是否应该结束?
if(match condition){
return some value;
}
//第三部:缩小问题规模
result1 = fn(n1);
result2 = fn(n2)'
.......'
//第四部:整合结果
return combine(result1,result2);
}
常用场景
- 二叉树的定义和遍历,二叉树的问题
- 归并排序、快速排序
- 动态规划
- 二分搜索