一文梳理“递推关系”

随着学习的深入,发现递推关系在数学和算法领域都有着及其重要的作用。并且其还有一个特点就是相对生成函数,排列组合等内容来说,递推关系貌似更加“零碎”,很多人反应说觉得递推关系“方法多,巧,难想到”。本文就在这里梳理下递推关系相关的内容,使读者对其有一个系统性的理解和掌握。

递推关系的定义

百度百科:如果数列f的第n项与它前一项或几项的关系可以用一个式子来表示,那么这个公式叫做这个数列的递推公式
我们用更加数学的语言来说明那就是 a n = f ( a n − 1 , a n − 2 , . . . , a 1 ) a_n=f(a_{n-1},a_{n-2},...,a_1) an=f(an1,an2,...,a1)
哲学上来说,是整体与部分的关系,从部分推知整体。我们发现事物与其“相邻事物”的联系 = > => =>事物总体特征
由此可见,递推关系并不是一个相对独立的系统,它是处理其他问题的一种方法。那么如何递推求通项公式,就是问题的递推关系的核心问题。

常见的递推关系及解法

接下来介绍常见的递推关系及其解法,实际上就是下面俩个问题。

特征方程法

问题1.解常系数线性齐次递推关系

一般形式: f ( n ) = c 1 ∗ f ( n − 1 ) + c 2 ∗ f ( n − 2 ) + c k ∗ f ( n − k ) f(n)=c_1*f(n-1)+c_2*f(n-2)+c_k*f(n-k) f(n)=c1f(n1)+c2f(n2)+ckf(nk)

定义特征方程: x k − c 1 ∗ x k − 1 − c 2 ∗ x k − 2 − . . . − c k = 0 x^k-c_1*x^{k-1}-c_2*x^{k-2}-...-c_k=0 xkc1xk1c2xk2...ck=0
解:如果这个方程有k个不同的根,分别记作 q 1 , q 2 , . . . , q k q_1,q_2,...,q_k q1,q2,...,qk,则 f ( n ) = b 1 ∗ q 1 n + b 2 ∗ q 2 n + . . . + b k ∗ q k n f(n)=b_1*q_1^n+b_2*q_2^n+...+b_k*q_k^n f(n)=b1q1n+b2q2n+...+bkqkn,其中 b 1 , b 2 . . . , b k b_1,b_2...,b_k b1,b2...,bk都是待定常系数
如果有 m m m重根 q q q,则 q n , n ∗ q n , . . . , n m − 1 ∗ q n q^n,n*q^n,...,n^{m-1}*q^n qn,nqn,...,nm1qn都是原递推关系的解

问题2.解常系数线性非齐次递推关系

一般形式: f ( n ) = c 1 ∗ f ( n − 1 ) + c 2 ∗ f ( n − 2 ) + c k ∗ f ( n − k ) + g ( n ) f(n)=c_1*f(n-1)+c_2*f(n-2)+c_k*f(n-k)+g(n) f(n)=c1f(n1)+c2f(n2)+ckf(nk)+g(n)
有如下结论:非齐次解=对应齐次解+特解
齐次解如何解, g ( n ) = 0 g(n)=0 g(n)=0,化归为问题 1 1 1
关于特解,我们针对 g ( n ) g(n) g(n)的常见形式有如下公式
在这里插入图片描述
只需要设出 g ( n ) g(n) g(n),代入递推关系求出 g ( n ) g(n) g(n),然后和齐次解相加得到非齐次解,再用初始值确定待定参数即可。

生成函数法

生成函数能解决的问题之一就是递推关系,但实际上生成函数来做递推关系是大炮打蚊子,也就是说方法会非常简单,但是计算比较复杂。具体方法就三步:
1.令 A ( x ) = ∑ n = 0 ∞ f ( n ) x n A(x)=\sum_{n=0}^∞f(n)x^n A(x)=n=0f(n)xn
2.将关于 f ( n ) f(n) f(n)的递推关系转化为关于 A ( x ) A(x) A(x)的方程式
3.解出 A ( x ) A(x) A(x),将 A ( x ) A(x) A(x)展开成 x x x的幂级数, x n x^n xn的系数就是 f ( n ) f(n) f(n)

例题

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

递推关系在算法中的应用

常见到几乎无处不在。但是最重要的应用是动态规划。动态规划就是递推,动态规划问题的思考方式是一种对问题规模的整体思考。具体可以参考我的数据结构与算法专栏中的动态规划解法。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DataPlayerK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值