递归函数:直接或间接调用自身的函数。
递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。
分解子问题时,如果当前问题有多种情况需要考虑,要逐一进行枚举。
递归关系可能是一个公式,也可能是一个前提条件。
递归的基本思想:问题层层分解 ,把大规模问题层层转化为小规模问题求解。
递归的关键在于找出递归定义和递归终止条件。
递归终止条件:问题的最简单的情况,本身不再使用递归的定义。
递归算法解题的步骤:
- 分析问题、寻找递归:找出大规模问题与小规模问题的关系,通过递归使问题的规模逐渐变小。
- 设置边界、控制递归:找出停止条件。
- 设计函数、确定参数:设计函数体中的操作及相关参数。
**记忆化搜索:**把求出的结果记录下来,直接调用已知结果。(把已知结果记录的过程)
特点:空间换时间。
使用数组存储计算过的结果,避免重复计算,可明显改进算法的效率。
例如:半数集问题
int a[1001];
int comp(int n)
{
int ans=1;
if(a[n]>0)
return a[n];
for(int i=1;i<=n/2;i++)
ans+=comp(i);
a[n]=ans;
return ans;
}