1.递推
讲到动态规划就不得不提到递归,递推是经常被使用的一种简单算法。递推 是一种用若干步可重复的简单运算来描述复杂问题的方法。递推的特点在于,每一项都和他前面的若干项有一定关联,这种关联一般可以通过 递推关系式 来表示,可以通过其前面若干项得出某项的数据。对于递推问题的求解一般从初始的一个或若干个数据项出发,通过递推关系式逐步推进,从而得出想要的结果,这种求解问题的方法叫递推法。其中,初始的若干数据项称为边界。
例题:兔子问题
Description
有一种兔子,出生后一个月就可以长大,然后再过一个月一对长大的兔子就可以生育一对小兔子且以后每个月都能生育一对。现在,我们有一对刚出生的这种兔子,那么,n 个月过后,我们会有多少对兔子呢?假设所有的兔子都不会死亡。
Input
输入文件仅一行,包含一个自然数 n。
Output
输出文件仅一行,包含一个自然数,即 n 个月后兔子的对数。
Sample Input 1
1
Sample Output 1
1
Sample Input 2
3
Sample Output 2
2
Source
一本通
这道题虽然有规律,可以直接用公式算出来,但我们还是要知道用递推的做法。
(因为作者懒,所以只讲核心部分)
f[1] = 1, f[2] = 1;
for(int i = 3;i <= n; ++i) {
f[i] = f[i-1] + f[i-2];
}
// f[n] 即