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

相关推荐
OuO-21 天前
笔试强训 Day 43:kotori 和抽卡(二)、ruby 和薯条、循环汉诺塔
数学·前缀和·二分查找·动态规划·排序·滑动窗口·循环汉诺塔
Luhui Dev3 天前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
金銀銅鐵6 天前
[Python] 借助 Turtle 来展示汉诺塔
python·数学
雪碧聊技术6 天前
【数学/高数】洛必达法则详解:从原理到实战例题(附手写笔记解析)
数学·洛必达法则·等价无穷小
TechEdu2026067 天前
[通信与计算]通信中的数学:核心概念与工程联系
数学·信息与通信·通信系统
金銀銅鐵8 天前
[Python] 借助 Pillow 和 NumPy 生成与斐波那契数列有关的图案
python·数学
Tisfy9 天前
LeetCode 3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)
数学·算法·leetcode·题解·枚举
闻缺陷则喜何志丹9 天前
【高等几何 梅向明】正交变换与仿射变换
数学·仿射变换·高等几何·投影几何·正交变换
Luhui Dev12 天前
几何题配图 API 怎么选?从文本生成到可编辑源文件的接入指南
人工智能·数学·agent·luhuidev
EQUINOX114 天前
【NCE】
数学