f(n)=af(n-1)+b根据一阶线性递推式推导通项公式

之前做了一道算法题,根据题意能推导出一个公式:

f(n)={1,n=13f(n−1)+2,n≥2 f(n)= \begin{cases} 1, & n=1 \\ 3f(n-1)+2, & n\ge 2 \end{cases} f(n)={1,3f(n−1)+2,n=1n≥2

这里的n是整数。

看到这个公式自然而然地想到使用递归的方式编程解决。

在n很小的时候这没问题,但是当n大的时候,即使n=20时,递归也有20层调用栈的开销。

因此想到推导通向公式。

当前的这个公式是一阶线性递推 公式,即形如f(n)=af(n-1)+b的形式


如何根据f(n)的递推公式推导出f(n)的通项公式呢?

假设存在一个常数k,使得

g(n)=f(n)+k g(n)=f(n)+k g(n)=f(n)+k

那么

f(n)=g(n)−k f(n)=g(n)-k f(n)=g(n)−k

从公式

f(n)=3f(n−1)+2 f(n)=3f(n-1)+2 f(n)=3f(n−1)+2

可以得到

g(n)−k=3g(n−1)−k+2 g(n)-k=3g(n-1)-k+2 g(n)−k=3g(n−1)−k+2

=>

g(n)=3g(n−1)−2k+2 g(n)=3g(n-1)-2k+2 g(n)=3g(n−1)−2k+2

想让常数项消失得使

−2k+2=0 -2k+2=0 −2k+2=0

即

k=1 k=1 k=1

得到

g(n)=3g(n−1) g(n)=3g(n-1) g(n)=3g(n−1)

结合

g(1)=f(1)+k=1+1=2 g(1)=f(1)+k=1+1=2 g(1)=f(1)+k=1+1=2

可以得到g(n)通项公式

g(n)=2∗3n−1 g(n)=2*3^{n-1} g(n)=2∗3n−1

因此

f(n)=g(n)−k=2∗3n−1−1 f(n)=g(n)-k=2*3^{n-1}-1 f(n)=g(n)−k=2∗3n−1−1


总结一下,

对于f(n)=af(n-1)+b的递推公式,令g(n)=f(n)+k,结合f(n)的递推公式,可以得到g(n)=pg(n-1)+qk+r,通过令qk+r=0的方式消除掉常数项,得到k,进而推导出g(n)的通项公式,从而得到f(n)的通项公式。


还是当年高中nb,现在啥也不会hhh

相关推荐
闻缺陷则喜何志丹10 天前
【计算几何】clipper库之扫描线、活动边、输出区域
数学·计算几何·扫描线·clipper·活动边·输出区域
铸人10 天前
A Spigot Algorithm for the Digits of Pi (转)
数学·数论
Luhui Dev10 天前
几何画板工程持久化与版本管理方案:变更监听、自动保存与版本恢复
人工智能·数学·ai·agent·luhuidev
Samson Bruce13 天前
【群论基础】
数学
铸人14 天前
圆周率和自然对数底 - 5
数学·复数
xiaoniu14285715 天前
命题的映射化
数学·1024程序员节·高中数学·文化课
DogDaoDao16 天前
声音、图像、视频是如何形成的:从物理量到比特流的完整链条
图像处理·数学·音视频·音频·数字信号处理·视频处理·音视频编解码
吞下星星的少年·-·17 天前
Div.2 CF edu195A题(数学,贪心)
数学·算法·贪心
star learning white20 天前
高等数学1
数列