什么是线性齐次递推方程?
递推方程中只由数列项的线性变换组成,不包含常数项
an=c1∗cn−1+c2∗an−2+...+ck∗an−k
例如斐波那契数列
an=an−1+an−2
如何求线性齐次递推方程的通项公式?
解特征方程
xk=c1∗xi−1+c2∗xi−2+...+ck
获得 m 个根,假设根 pi有hi 个重根,
那么通项公式为
an=∑i=1m∑j=0hi−1Cij∗nj∗pin
求解斐波那契数列的通项公式
斐波那契数列
an=an−1+an−2
解特征方程
x2=x+1
解得
x1=21+5
x2=21−5
于是斐波那契数列通解是
an=C1∗(21+5)n+C2∗(21−5)n
当 a1=1,a2=1,可求得 C1=51,C2=−51
题型枚举
- 求斐波那契数列第 n 项的后三位
解析:直接使用递推公式快速幂算法,并模 1000
- 求斐波那契数列第 n 项的位数
解析:使用通项公式,由于 (21−5)n 的绝对值小于 1,我们可以根据 51∗(21+5)n 来估算位数,只需要对 51∗(21+5)n 求以 10 为底的对数,整数部分就是位数
- 求斐波那契数列第 n 项的首位
解析:同上题,把小数部分拿出来再求 10 的指数即可
- 求解 (1+2)n 的后 3 位
解析:(1+2)n+(1−2)n 是递推方程 an=2an−1+an−2 的通解,由于 (1−2)n 的绝对值小于 1,所以我们可以使用递推方程快速幂求出 an 的解,再判断 (1−2)n 的符号即可求出结果
总结
如果需要后 n 位的精确值,用递推公式快速幂算法
如果需要前 n 位的值,估算位数,尝试求通项公式,看看能否消掉干扰项,剩下一个指数函数