首先让我们来复习递推。
这是讲完语法和几种排序就开始学习的算法,总体上来说十分基础,并与之后的算法有着密切的联系。
算法分析:
递推,就是一个不断由已知的信息推出未知的信息直到推出我们所需的结果的一个过程。
这么说太抽象,直接上例子:
输出斐波那契数列的第N项。
我们知道,斐波那契数列是这样的一个数列:1,1,2,3,5,8,13,21。。。。。。
就是每一项等于它的前两项之和。递推公式An=An-1+An-2 (n>=2)
这个东西要怎么实现呢?我们想到了伟大的循环。
我们可以开一个数组,F[N]表示斐波那契数列的第N个数是多少。则F[i]=F[i-1]+F[i-2],然后通过循环来求出第N项。
因为调用时用到了第i-1和第i-2项,所以我们要从i=3开始循环,循环到N,并把F[1]和F[2]都初始为1(因为斐波那契数列的前两项都是1),每次让F[i]=F[i-1]+F[i-2],这样就完成了。
总结一下,递推有以下几点十分关键:
(1)初始值:根据你的转移方程,需要考虑要哪些状态附上初始值。
(2)转移方程:这个的重要性就不说了,没有它你这么写啊。。。
(3)枚举顺序和边界:要注意哪些是已知的,哪些是未知的,要保证推出的信息都是从已知推出的。
(4)时间复杂度:一般都是状态数*处理每个状态所用时间,不排除个例。
简单的递推大概就是这样。