跳到内容
返回探索
离散数学 / 英语

递归算法的时间复杂度分析(Greedy Academy)

贪心学院 Greedy AI · YouTube · 3:47

打开原视频
阅读与收藏

把讲解展开来看。

被收藏 0

已审核学习内容 · 视频分析 · 中文
阅读完整概览

本视频片段讲解了如何利用递归树分析斐波那契数列递归算法的时间复杂度。讲师首先以计算 f(7)f(7) 为例,在白板上逐步绘制出递归展开树,直观展示了朴素递归中存在的严重重复计算问题。随后,讲师阐明了递归树“自上而下拆分、自底向上汇总”的运行机制,并提出了核心分析方法:将树中每个节点视为一次单位计算,通过统计树的总节点数来评估时间复杂度。片段最后,讲师开始尝试按层寻找节点数量的规律(如第一层为 202^0),为推导指数级复杂度做铺垫。 本片段用 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)、f(1)=f(2)=1f(1)=f(2)=1 的递归例子,画出以 f(7)f(7) 为根的二叉递归树,逐层统计节点数为 202^0、212^1、222^2、232^3,并说明总节点数相当于把这些层相加。讲解者进一步举例 20+212^0+2^1+...+26=27−12^6=2^7-1,得出该递归算法时间复杂度为 O(2n)O(2^n),并将其称为指数级复杂度。结尾说明这是用树来计算递归算法时间复杂度的方法,随后转入片尾品牌动画。

在学习检查器中查看要点和时刻,或切换阅读标签查看完整笔记。

章节

0:00引入:斐波那契数列与计算目标 f(7)f(7)0:10构建递归树:展示 f(7)f(7) 的递归展开过程0:58解析递归树:自底向上的结果汇总1:20方法论:通过统计节点数分析时间复杂度1:50初步计算:按层寻找节点数量规律2:00递归树逐层计数2:16从各层规律看整棵树规模2:37递归基与“不必全画”的说明2:51求总节点数并写出 O(2n)O(2^n)3:20指数级复杂度总结与过渡3:39片尾品牌动画

学习解说文稿

依据视频画面与讲解整理,并非逐字语音转写。

视频开篇在白板上展示了斐波那契数列的前几项(1, 1, 2, 3, 5, 8...)及其递归定义公式 f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2) 和基准条件 f(1)=f(2)=1f(1) = f(2) = 1。讲师设定了一个具体的计算目标:求解 f(7)f(7)。

为了直观展示计算 f(7)f(7) 的过程,讲师开始绘制递归树。根据公式,f(7)f(7) 被拆解为子节点 f(6)f(6) 和 f(5)f(5)。接着,f(6)f(6) 进一步拆解为 f(5)f(5) 和 f(4)f(4),f(5)f(5) 拆解为 f(4)f(4) 和 f(3)f(3)。随着树向下生长,可以清晰地看到诸如 f(4)f(4)、f(3)f(3)、f(2)f(2) 等节点在不同分支上被反复生成。这一视觉过程深刻揭示了朴素递归算法中存在的大量重复计算问题。

在画完部分递归树后,讲师解释了这棵树的完整含义。它不仅代表了自上而下的问题分解(“递”),还隐含了自下而上的结果汇总(“归”)。例如,一旦底层的 f(5)f(5) 和 f(4)f(4) 计算完毕,它们的值相加即可得到父节点 f(6)f(6) 的值;同理,f(6)f(6) 和 f(5)f(5) 的值相加最终得出根节点 f(7)f(7) 的结果。

基于上述理解,讲师提出了分析此类递归算法时间复杂度的核心方法:将递归树中的每一个节点视为一次“单位的计算”。因此,评估整个算法的执行代价,就转化为了一个简单的计数问题——统计这棵递归树中所有节点(包括内部节点和叶子节点)的总数。

为了计算总节点数,讲师开始尝试寻找树中节点分布的规律。他首先观察第一层(根节点层),发现只有 1 个节点,并将其数学化表示为 202^0。随后,讲师准备继续分析第二层的节点数量,试图通过逐层累加的方式求出整棵树的节点总和,从而推导出算法的时间复杂度。

(注:视频在讲师刚提及“然后呢第二个”时结束,未展示后续的第二层分析及最终的复杂度求和结果。)

这一段从已经画好的递归树出发,讨论 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)、f(1)=f(2)=1f(1)=f(2)=1 这一类递归调用展开后的规模。画面右侧是一棵以 f(7)f(7) 为根的二叉树,讲解者从上往下逐层指读:第二层有 2 个节点,第三层有 4 个节点,第四层有 8 个节点,并在树旁依次写出 202^0、212^1、222^2、232^3。这里的数学依据很直接:每一次递归调用都会分裂成两个子调用,所以层节点数按 2 的幂增长。

接着,讲解者把“每层按 2 的幂增加”这一观察上升为整棵树的规模问题:如果把这棵树全部画出来,深度是多少,最后的叶节点有多少。视频此时没有给出严格的形式化证明,而是用直观计数说明,若按完全二叉树方式延展,底层规模会达到 262^6 这一量级。这一步的作用是把单层规律过渡到“整棵树总节点数”的估计。

随后,讲解者补充一个重要区分:因为递归基是 f(1)=f(2)=1f(1)=f(2)=1,实际画图时没有必要把整棵树全部展开;但从理论分析角度,仍然要按“这么多节点”来估计规模。也就是说,画面中的省略号只是绘图简化,不改变复杂度分析的对象。这里对应的方法论是:用递归树的理论节点总数来代表递归调用次数。

在此基础上,讲解者把问题转化为求和:整棵树的节点数等于各层节点数相加。为了说明这种求和的增长趋势,他举了一个具体例子,20+21+⋯+26=27−12^0+2^1+\cdots+2^6=2^7-1。这个等式本身是有限几何级数求和的典型形式,视频用它来支撑一个结论:当层数随输入规模增长时,总节点数也由最高次幂主导,因此时间复杂度可以写成 O(2n)O(2^n)。白板左下此时写出 O(2n)O(2^n),把前面的树形计数收束成一个渐近结论。

最后,讲解者给这一结果命名:O(2n)O(2^n) 属于“指数级的复杂度”。随后他用一句话总结本段方法——这是通过一棵树来表示或计算递归算法时间复杂度的解法,并预告下一部分将讨论递归函数的空间复杂度。到约 99 秒后,教学画面结束,转为品牌片尾动画,不再包含新的数学内容。

知识卡片

01

斐波那契数列的递归定义

视频给出了斐波那契数列的标准递归形式:对于 n>2n > 2,每一项等于前两项之和,即 f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2);同时定义了基准情况 f(1)=1f(1) = 1 和 f(2)=1f(2) = 1。这是理解后续递归树构建的基础。

f(n)=f(n−1)+f(n−2),f(1)=f(2)=1f(n) = f(n-1) + f(n-2), \quad f(1) = f(2) = 1
02

递归树的构建与重复子问题

以计算 f(7)f(7) 为例,将递归过程可视化为一棵二叉树。根节点为 f(7)f(7),每个非基准节点根据其定义拆分为两个子节点。观察这棵树可以发现,相同的子问题(如 f(4)f(4), f(3)f(3))会在不同的分支中被多次计算,这直观地解释了为什么朴素递归效率低下。

03

递归的“递”与“归”

递归算法包含两个阶段:“递”是自上而下将大问题分解为小问题(如 f(7)f(7) 拆分为 f(6)f(6) 和 f(5)f(5));“归”是自下而上将小问题的解汇总成大问题的解(如已知 f(5)f(5) 和 f(4)f(4) 的值,相加得到 f(6)f(6) 的值,最终求得 f(7)f(7))。递归树完整地展现了这两个过程。

04

通过统计递归树节点分析时间复杂度

这是一种直观评估递归算法性能的方法。其核心思想是将递归树中的每个节点等同于一次基本的函数调用(单位计算)。因此,算法的总时间复杂度正比于递归树中节点的总数。通过分析每一层节点数量的规律(如第一层为 202^0),可以求和得到总节点数,进而推导出复杂度的阶(通常为指数级)。

05

递归定义与递归基

视频分析的对象是递归函数 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2),并明确给出递归基 f(1)=f(2)=1f(1)=f(2)=1。后续所有关于调用次数和复杂度的讨论都建立在这个递归式之上。

f(n)=f(n−1)+f(n−2),f(1)=f(2)=1f(n)=f(n-1)+f(n-2),\quad f(1)=f(2)=1
06

递归树每层节点数

把 f(7)f(7) 展开成二叉递归树后,视频逐层计数:第一层 11 个节点,第二层 22 个,第三层 44 个,第四层 88 个,因此各层节点数写成 20,21,22,232^0,2^1,2^2,2^3。这说明每往下一层,节点数乘以 22。

levelknumber of nodes=2k−1\text{level}k\text{number of nodes}=2^{k-1}
07

为什么要数整棵树的节点

讲解者把“递归算法有多慢”转化为“递归树一共有多少个节点”。因为每个节点对应一次递归调用,所以总调用次数可由各层节点数相加得到。

08

几何级数例子

视频用具体例子说明层节点数相加的结果:20+21+⋯+26=27−12^0+2^1+\cdots+2^6=2^7-1。这个例子用来支持“总规模由最高次幂主导”的直观判断。

20+21+⋯+26=27−12^0+2^1+\cdots+2^6=2^7-1
09

时间复杂度结论

基于递归树节点总数的指数增长,视频把该递归算法的时间复杂度写成 O(2n)O(2^n)。这是本段的核心结论。

O(2n)O(2^n)
10

指数级复杂度

讲解者把 O(2n)O(2^n) 这一类随 nn 呈 2 的幂增长的复杂度称为“指数级的复杂度”,并说明这就是用树分析递归时间复杂度的方法。

详细学习笔记

按知识点查看条件、步骤和证据。补充解释与视频直接内容分别标明。

符号定义 · 10

1, 1, 2, 3, 5, 8 ...

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板上预先写有数列 1, 1, 2, 3, 5, 8 ...

符号

1, 1, 2, 3, 5, 8 ...

含义

斐波那契数列的前几项

适用范围

正整数序列

f(n)f(n)

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板上预先写有 f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2)

符号

f(n)f(n)

含义

斐波那契数列的第 n 项

适用范围

n 为正整数

f(1)=f(2)=1f(1) = f(2) = 1

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板上预先写有 f(1)=f(2)=1f(1) = f(2) = 1

符号

f(1)=f(2)=1f(1) = f(2) = 1

含义

斐波那契数列的初始条件(基准情况)

适用范围

n 等于 1 或 2

f(7)f(7)

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    讲师在白板上写下 f(7)f(7) 作为计算目标

  2. 声音
    观察依据

    讲师说“假设我要计算的是 f(7)f(7)”

符号

f(7)f(7)

含义

需要计算的具体斐波那契数项

适用范围

n 等于 7

f(n)f(n)

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板左侧写有 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)

符号

f(n)f(n)

含义

递归函数的第 n 项,视频中用于表示斐波那契型递归调用

适用范围

n 为正整数

f(1)f(1), f(2)f(2)

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板左侧写有 f(1)=f(2)=1f(1)=f(2)=1

符号

f(1)f(1), f(2)f(2)

含义

递归基,视频明确给出二者都等于 1

适用范围

固定初值

f(k)f(k)

依据清楚
视频直接表达
来源依据
  1. 图示
    观察依据

    右侧画出以 f(7)f(7) 为根的二叉递归树,节点标注 f(6)f(6)、f(5)f(5)、f(4)f(4)、f(3)f(3)、f(2)f(2)、f(1)f(1)

符号

f(k)f(k)

含义

递归树中某一层的具体调用节点

适用范围

k 为从 7 向下递减的整数

202^0, 212^1, 222^2, 232^3, 262^6

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    树的右侧逐层写出 202^0、212^1、222^2、232^3,后续又补出 262^6

  2. 声音
    观察依据

    讲解者说第二层有两个节点,第三层有四个节点,第四层有八个节点

符号

202^0, 212^1, 222^2, 232^3, 262^6

含义

对应递归树各层的节点数量,视频按“层”计数

适用范围

非负整数指数

O(2n)O(2^n)

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板左下写出 O(2n)O(2^n)

  2. 声音
    观察依据

    讲解者说复杂度可以写成 2 的 n 次方

符号

O(2n)O(2^n)

含义

该递归算法的时间复杂度上界记号

适用范围

n 为输入规模

20+21+⋯+262^0+2^1+\cdots+2^6

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者举例说把 2 的 0 次方加到 2 的 6 次方,等于 2 的 7 次方减 1

待核验内容
  1. 该求和式未完整写在白板上,只在口头举例中出现

符号

20+21+⋯+262^0+2^1+\cdots+2^6

含义

示例中整棵理论二叉树各层节点数的总和

适用范围

有限几何级数

知识点 · 8

斐波那契数列的递归定义

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板上预先写有 f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2) 和 f(1)=f(2)=1f(1) = f(2) = 1

定义
解释

视频通过白板上的公式给出了斐波那契数列的递归定义。对于 n>2n > 2,第 n 项等于前两项之和;对于 n=1n = 1 和 n=2n = 2,其值均为 1。这是后续构建递归树和分析时间复杂度的基础。

公式
f(n)=f(n−1)+f(n−2),f(1)=f(2)=1f(n) = f(n-1) + f(n-2), \quad f(1) = f(2) = 1
适用条件
  1. n 为正整数

  2. 当 n>2n > 2 时使用递推公式

  3. 当 n=1n = 1 或 n=2n = 2 时使用基准情况

递归树的构建方法

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    讲师以 f(7)f(7) 为根节点,向下画出分支 f(6)f(6) 和 f(5)f(5),并继续将 f(6)f(6) 拆分为 f(5)f(5) 和 f(4)f(4),以此类推,形成一棵倒置的二叉树。

  2. 声音
    观察依据

    讲师解释“为了计算 f(7)f(7) 呢,我们要知道这两项,也就是 f(6)f(6) 和 f(5)f(5)... 为了计算 f(6)f(6) 呢,我们首先要知道 f(5)f(5) 和 f(4)f(4)...”

方法
解释

视频展示了如何通过递归展开来构建递归树。以目标计算 f(n)f(n) 为根节点,根据其递归定义 f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2),将其拆分为两个子节点 f(n−1)f(n-1) 和 f(n−2)f(n-2)。对每个非基准情况的子节点重复此过程,直到所有叶子节点都达到基准情况(如 f(1)f(1) 或 f(2)f(2))。

公式
适用条件
  1. 适用于具有多项递归调用的递归算法

  2. 树的深度取决于递归的终止条件

先修条目
  1. 斐波那契数列的递归定义

递归树节点的计算意义

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲师明确指出:“在这棵树里面,每个节点我们可以把它看作是一个单位的计算。”

定义
解释

在递归树中,每一个节点代表一次函数调用,即一个单位的计算操作。通过分析树中节点的总数,可以直观地评估递归算法的执行次数,进而推导其时间复杂度。

公式
适用条件
  1. 假设每次函数调用(除递归调用外)的开销为常数级别

先修条目
  1. 递归树的构建方法

通过计算递归树节点总数分析时间复杂度

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲师总结:“为了分析咱们递归函数的时间复杂度,我们只需要去看一下在这棵树里面出现了多少个节点... 所以我们只需要去数一下就可以了。”

  2. 动画
    观察依据

    讲师开始按层分析节点数量,第一层有 1 个节点,表示为 202^0。

方法
解释

该视频片段提出了一种分析递归时间复杂度的直观方法:将递归过程转化为递归树,然后统计树中所有节点(包括内部节点和叶子节点)的总数。节点总数即代表了算法执行的总计算次数。视频中讲师开始尝试按层寻找节点数量的规律(如第一层为 202^0)。

公式
适用条件
  1. 适用于可以用递归树清晰表示的递归算法

先修条目
  1. 递归树节点的计算意义

递归定义与递归基

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    f(n)f(n) 等于 f(n 减 1) 加上 f(n 减 2)

  2. 公式
    观察依据

    f(1)f(1) 和 f(2)f(2) 都等于 1

  3. 声音
    观察依据

    讲解者围绕这一递归式展开复杂度分析

定义
解释

视频以 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2) 且 f(1)=f(2)=1f(1)=f(2)=1 作为讨论对象,用它构造一棵二叉递归树,再分析递归调用次数。

公式
f(n)=f(n−1)+f(n−2),f(1)=f(2)=1f(n)=f(n-1)+f(n-2),\quad f(1)=f(2)=1
适用条件
  1. n 为整数

  2. 递归基为 f(1)=f(2)=1f(1)=f(2)=1

递归树每层节点数按 2 的幂增长

依据清楚
视频直接表达
来源依据
  1. 图示
    观察依据

    右侧递归树旁逐层标注 202^0、212^1、222^2、232^3

  2. 声音
    观察依据

    讲解者依次说第二层两个节点、第三层四个节点、第四层八个节点

方法
解释

视频把一次递归调用展开成树形结构,并观察每一层节点数:第一层 1 个,第二层 2 个,第三层 4 个,第四层 8 个,因此第 k 层对应 2k−12^{k-1} 个节点。

公式
levelknumber of nodes=2k−1\text{level}k\text{number of nodes}=2^{k-1}
适用条件
  1. 按完全二叉树方式计数

  2. 视频中的“层”从 1 开始编号

先修条目
  1. 递归定义与递归基

总节点数决定时间复杂度

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者说要数整棵树有多少节点,相当于把这些值相加在一起

  2. 公式
    观察依据

    白板写出 O(2n)O(2^n)

  3. 声音
    观察依据

    举例 20+21+⋯+26=27−12^0+2^1+\cdots+2^6=2^7-1

待核验内容
  1. 视频没有写出一般形式的求和公式,只给出具体例子和最终大 O 结论

方法
解释

视频将递归算法的时间复杂度转化为递归树节点总数问题,再把各层节点数相加,得到指数级增长,并写成 O(2n)O(2^n)。

公式
O(2n)O(2^n)
适用条件
  1. 以递归调用次数衡量时间开销

  2. 采用完全二叉树式上界估计

先修条目
  1. 递归树每层节点数按 2 的幂增长

指数级复杂度的命名

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者说这种复杂度叫做指数级的复杂度

定义
解释

视频把 O(2n)O(2^n) 这类随输入规模 n 呈 2 的幂增长的复杂度称为“指数级的复杂度”。

公式
适用条件
  1. 复杂度形式为 O(2n)O(2^n) 或同类指数增长

先修条目
  1. 总节点数决定时间复杂度
定理与条件 · 2

有限几何级数示例

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者说:把 2 的 0 次方加上 2 的 1 次方一直加到 2 的 6 次方,其实它是等于 2 的 7 次方减 1 的

待核验内容
  1. 这是口头举例,白板上没有完整写出该等式

命题
命题

2 的 0 次方加 2 的 1 次方加 2 的 2 次方加 2 的 3 次方加 2 的 4 次方加 2 的 5 次方加 2 的 6 次方等于 2 的 7 次方减 1

前提
  1. 求和从 202^0 开始

  2. 公比为 2

  3. 末项为 262^6

量词

对这一组有限项成立

该递归算法的时间复杂度

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    白板写出 O(2n)O(2^n)

  2. 声音
    观察依据

    讲解者说复杂度很明显就是 O(2 的 n 次方)

待核验内容
  1. 视频未严格证明上界,只是通过递归树节点计数给出直观推导

命题
命题

针对视频中的递归问题,其时间复杂度可写成 O(2n)O(2^n)

前提
  1. 以递归调用次数作为主要代价

  2. 按完全二叉树式节点数进行上界估计

量词

对输入规模 n 的渐近估计

推导与证明 · 4

f(7)f(7) 的递归展开过程

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    讲师在白板上逐步画出从 f(7)f(7) 开始的递归拆分过程,直到 f(3)f(3) 和 f(2)f(2)。

  2. 声音
    观察依据

    讲师同步口述每一步的拆分逻辑:“为了计算 f(7)f(7)... 要知道 f(6)f(6) 和 f(5)f(5)... 为了计算 f(6)f(6)... 要知道 f(5)f(5) 和 f(4)f(4)...”

视觉说明
步骤
  1. 公式
    f(7)f(7)
    解释

    设定计算目标为 f(7)f(7)。

    步骤依据

    视频初始设定的例子。

    视频直接表达
  2. 公式
    f(7)→f(6)+f(5)f(7) \rightarrow f(6) + f(5)
    解释

    根据递归定义,将 f(7)f(7) 拆分为 f(6)f(6) 和 f(5)f(5) 两个子问题。

    步骤依据

    应用公式 f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2)。

    视频直接表达
  3. 公式
    f(6)→f(5)+f(4),f(5)→f(4)+f(3)f(6) \rightarrow f(5) + f(4), \quad f(5) \rightarrow f(4) + f(3)
    解释

    继续对新生成的非基准节点 f(6)f(6) 和 f(5)f(5) 进行拆分。

    步骤依据

    再次应用递归定义。

    视频直接表达
  4. 公式
    f(5)→f(4)+f(3),f(4)→f(3)+f(2),f(4)→f(3)+f(2),f(3)→f(2)+f(1)f(5) \rightarrow f(4) + f(3), \quad f(4) \rightarrow f(3) + f(2), \quad f(4) \rightarrow f(3) + f(2), \quad f(3) \rightarrow f(2) + f(1)
    解释

    讲师持续向下展开树的分支,展示了大量重复的子问题(如多个 f(4)f(4), f(3)f(3), f(2)f(2))。

    步骤依据

    递归定义的直接推演。

    视频直接表达
结论

通过不断应用递归公式,f(7)f(7) 被展开成一棵包含大量重复子问题的二叉树,直观展示了朴素递归算法的计算冗余。

自底向上的结果汇总过程

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲师解释:“假设我要计算 f(6)f(6),然后我已经知道了 f(5)f(5) 和 f(4)f(4),那我只需要把这两个数相加之后... 我就可以得到 f(6)f(6)了。然后我得到这两个数之后,我把它俩做一个相加,我就可以得到 f(7)f(7)。”

  2. 动画
    观察依据

    讲师用笔在树上从下往上指代节点,模拟求和过程。

直观解释
步骤
  1. 公式
    Givenf(5),f(4)⇒f(6)=f(5)+f(4)\text{Given} f(5), f(4) \Rightarrow f(6) = f(5) + f(4)
    解释

    当底层子问题的值求出后,可以通过相加得到上一层节点的值。

    步骤依据

    递归定义的逆过程(归)。

    视频直接表达
  2. 公式
    Givenf(6),f(5)⇒f(7)=f(6)+f(5)\text{Given} f(6), f(5) \Rightarrow f(7) = f(6) + f(5)
    解释

    同理,利用刚求出的 f(6)f(6) 和已有的 f(5)f(5) 相加,最终得到根节点 f(7)f(7) 的值。

    步骤依据

    递归定义的逆过程(归)。

    视频直接表达
结论

递归算法不仅包含自上而下的“递”(拆分问题),还包含自下而上的“归”(汇总结果)。树的每个节点都参与了最终的加法运算。

由递归树层节点数推出 O(2n)O(2^n)

依据清楚
视频直接表达
来源依据
  1. 图示
    观察依据

    先画出 f(7)f(7) 的二叉递归树,再在右侧标注 202^0、212^1、222^2、232^3

  2. 声音
    观察依据

    讲解者逐层数节点,并说整棵树相当于把这些值相加

  3. 公式
    观察依据

    最后写出 O(2n)O(2^n)

待核验内容
  1. 从具体例子 f(7)f(7) 推广到一般 n 的过程是直观说明,不是形式化证明

直观解释
步骤
  1. 公式
    f(n)=f(n−1)+f(n−2), f(1)=f(2)=1f(n)=f(n-1)+f(n-2),\ f(1)=f(2)=1
    解释

    先给出被分析的递归函数及其递归基。

    步骤依据

    白板左侧直接写出。

    视频直接表达
  2. 公式
    f(7)→f(6),f(5)→f(5),f(4),f(3),f(2)→⋯f(7)\to f(6),f(5)\to f(5),f(4),f(3),f(2)\to \cdots
    解释

    把一次调用展开成二叉递归树,每个节点继续分裂成两个子调用。

    步骤依据

    右侧树状图直接展示了展开过程。

    视频直接表达
  3. 公式
    20, 21, 22, 232^0,\ 2^1,\ 2^2,\ 2^3
    解释

    逐层统计节点数:第一层 1 个,第二层 2 个,第三层 4 个,第四层 8 个。

    步骤依据

    讲解者口头逐层说明,并在树旁写出这些幂次。

    视频直接表达
  4. 公式
    ∑k=0m2k\sum_{k=0}^{m}2^k
    解释

    要估计整棵树的规模,就把各层节点数相加。

    步骤依据

    讲解者说“相当于把这些值把它相加在一起”。

    视频直接表达
  5. 公式
    20+21+⋯+26=27−12^0+2^1+\cdots+2^6=2^7-1
    解释

    用具体例子说明几何级数求和结果是下一幂减一。

    步骤依据

    讲解者口头举例给出。

    视频直接表达
  6. 公式
    O(2n)O(2^n)
    解释

    由于总节点数随深度呈 2 的幂增长,视频把时间复杂度写成 O(2n)O(2^n)。

    步骤依据

    白板左下写出 O(2n)O(2^n),讲解者同步说明。

    视频直接表达
结论

视频通过递归树逐层计数,得出该递归算法的时间复杂度为 O(2n)O(2^n),并称其为指数级复杂度。

递归基使实际树不必完整画出

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者说由于有基本条件是 f(1)f(1) 和 f(2)f(2) 分别等于 1,所以没必要把这个树完全画出来

  2. 图示
    观察依据

    图中只画出部分层级,底部用省略号表示未继续展开

待核验内容
  1. 视频没有给出截断后的精确节点数,只强调理论上需要这么多节点

直观解释
步骤
  1. 公式
    f(1)=f(2)=1f(1)=f(2)=1
    解释

    递归基给出后,某些分支会在底层停止继续分裂。

    步骤依据

    白板左侧直接写出递归基。

    视频直接表达
  2. 公式
    theoretical number of nodes in a complete tree\text{theoretical number of nodes in a complete tree}
    解释

    讲解者仍先按完全二叉树方式估计规模,再说明实际画图时无需全部展开。

    步骤依据

    口头说明“从理论的角度来讲的话,其实我们需要这么多的节点”。

    视频直接表达
结论

视频区分了“实际不必全画”和“理论上按完全树估计规模”这两个层面。

例题详解 · 2

计算斐波那契数 f(7)f(7) 的递归树分析

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    整个视频片段都在白板上绘制和分析以 f(7)f(7) 为根的递归树。

  2. 声音
    观察依据

    讲师全程围绕 f(7)f(7) 的计算过程进行讲解。

题目

假设要计算斐波那契数列的第 7 项 f(7)f(7),请分析其递归计算过程并探讨如何评估时间复杂度。

已知条件
  1. f 在 n 处的值等于 f 在 n 减 1 处的值加上 f 在 n 减 2 处的值

  2. f 在 1 处的值和 f 在 2 处的值都等于 1

  3. 目标计算 f(7)f(7)

目标

构建 f(7)f(7) 的递归树,并说明如何通过该树分析递归算法的时间复杂度。

步骤
  1. 公式
    Draw the root nodef(7)\text{Draw the root node} f(7)
    解释

    以目标计算 f(7)f(7) 作为递归树的起点。

    步骤依据

    递归调用的入口。

    视频直接表达
  2. 公式
    Split nodes level by levelf(7)→{f(6),f(5)},f(6)→{f(5),f(4)},…\text{Split nodes level by level} f(7) \to \{f(6), f(5)\}, f(6) \to \{f(5), f(4)\}, \dots
    解释

    根据递推公式,将每个大于 2 的节点拆分为两个子节点,直到出现 f(2)f(2) 或 f(1)f(1)。

    步骤依据

    应用斐波那契数列的递归定义。

    视频直接表达
  3. 公式
    Examine the structure of the tree\text{Examine the structure of the tree}
    解释

    发现树中存在大量重复计算的节点(如多个 f(4)f(4), f(3)f(3), f(2)f(2))。

    步骤依据

    视觉观察递归树的形态。

    视频直接表达
  4. 公式
    Define the computational meaning of each node\text{Define the computational meaning of each node}
    解释

    将树中的每一个节点视为一次单位的函数调用计算。

    步骤依据

    讲师在视频中的明确设定。

    视频直接表达
  5. 公式
    Introduce a method for analyzing complexity\text{Introduce a method for analyzing complexity}
    解释

    指出分析时间复杂度等价于统计这棵递归树中所有节点的总数。

    步骤依据

    总计算次数决定了算法的运行时间。

    视频直接表达
  6. 公式
    Attempt to count the number of nodes level by level\text{Attempt to count the number of nodes level by level}
    解释

    讲师开始分析第一层有 1 个节点(记为 202^0),准备寻找各层节点数的规律。

    步骤依据

    为了计算总节点数,先寻找局部规律。

    视频直接表达
结果

通过构建 f(7)f(7) 的递归树,可以直观看到朴素递归产生了大量重复子问题。分析其时间复杂度的方法是统计递归树中的节点总数,视频中讲师正准备通过按层寻找规律(如第一层 202^0 个节点)来计算总节点数。

检验

视频片段在讲师刚开始分析第二层节点时结束,未给出最终的复杂度结论(如 O(2n)O(2^n)),但方法论和初始步骤已完整展示。

f(7)f(7) 递归树示例

依据清楚
视频直接表达
来源依据
  1. 图示
    观察依据

    以 f(7)f(7) 为根画出递归树,并逐层标注节点数

  2. 声音
    观察依据

    讲解者围绕 f(7)f(7) 的展开过程逐层计数并求总复杂度

待核验内容
  1. 视频没有计算 f(7)f(7) 的函数值本身,重点在调用次数与复杂度

题目

对 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2),f(1)=f(2)=1f(1)=f(2)=1,分析 f(7)f(7) 展开成递归树后的节点规模与时间复杂度。

已知条件
  1. f(n)f(n) 等于 f(n 减 1) 加上 f(n 减 2)

  2. f(1)f(1) 和 f(2)f(2) 都等于 1

  3. 以 f(7)f(7) 为根展开递归树

目标

数出各层节点数,并据此给出时间复杂度。

步骤
  1. 公式
    f(7)f(7)
    解释

    根节点对应一次 f(7)f(7) 调用。

    步骤依据

    图中最上方节点为 f(7)f(7)。

    视频直接表达
  2. 公式
    f(6), f(5)f(6),\ f(5)
    解释

    第二层有两个节点。

    步骤依据

    讲解者说第二层总共有两个节点,旁边写 212^1。

    视频直接表达
  3. 公式
    f(5), f(4), f(3), f(2)f(5),\ f(4),\ f(3),\ f(2)
    解释

    第三层有四个节点。

    步骤依据

    讲解者说第三层总共有四个节点,旁边写 222^2。

    视频直接表达
  4. 公式
    f(4), f(3), f(3), f(2), f(2), f(1), f(1), f(0)f(4),\ f(3),\ f(3),\ f(2),\ f(2),\ f(1),\ f(1),\ f(0)
    解释

    第四层有八个节点。

    步骤依据

    讲解者说第四层总共有八个,旁边写 232^3;图中底层可见多个 f 项继续展开。

    视频直接表达
  5. 公式
    20+21+⋯+26=27−12^0+2^1+\cdots+2^6=2^7-1
    解释

    把各层节点数相加,视频用这个例子说明总和是下一幂减一。

    步骤依据

    讲解者口头举例说明。

    视频直接表达
  6. 公式
    O(2n)O(2^n)
    解释

    由总节点数的指数增长得到时间复杂度。

    步骤依据

    白板写出 O(2n)O(2^n),讲解者同步总结。

    视频直接表达
结果

该递归算法的时间复杂度为 O(2n)O(2^n),视频称之为指数级复杂度。

检验

视频通过逐层计数与几何级数例子验证总节点数呈 2 的幂增长。

图示与动画 · 6

绘制 f(7)f(7) 递归树的过程

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    讲师的手持笔在白板上从上到下、从左到右逐步绘制出 f(7)f(7) 的递归展开树。

图中对象
  1. 根节点 f(7)f(7)

  2. 分支节点 f(6)f(6), f(5)f(5), f(4)f(4), f(3)f(3), f(2)f(2)

  3. 连接线(箭头)

变化过程
  1. 节点数量随时间不断增加

  2. 树的深度逐渐加深

  3. 分支向两侧延展

不变量
  1. 每个非叶子节点都有两个子节点

  2. 子节点的参数总是比父节点小 1 或小 2

数学含义

动态展示了递归算法“递”的过程,即问题如何被一步步分解为更小的子问题,直观暴露了重复计算的现象。

指示自底向上求和的过程

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    讲师用笔尖在已画好的树上,从下方的节点指向上方的节点。

  2. 声音
    观察依据

    配合口述“把这两个数相加之后... 就可以得到 f(6)f(6)了”。

图中对象
  1. 已绘制的递归树

  2. 讲师的笔尖

变化过程
  1. 笔尖的焦点从树的底层逐渐移动到顶层

不变量
  1. 树的结构保持不变

数学含义

形象地演示了递归算法“归”的过程,即子问题的解如何逐层返回并组合成原问题的解。

开始按层分析节点数量

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    讲师在树的右侧写下虚线和 202^0,并用笔圈出第一层的 f(7)f(7)。

  2. 声音
    观察依据

    讲师说“首先我们来看一下第一层... 一个节点我们可以通过 2 的 0 次方可以把它表示起来”。

待核验内容
  1. 讲师刚提到“然后呢第二个”,视频即结束,第二层的具体分析未在画面中完整呈现。

图中对象
  1. 递归树的第一层

  2. 手写公式 202^0

  3. 虚线

变化过程
  1. 引入了按层计数的新视角

  2. 在树旁添加了数学表达式

不变量
  1. 递归树本身的结构未变

数学含义

标志着从定性观察转向定量分析,试图通过寻找每一层节点数量的数学规律(等比数列)来求解总节点数。

逐层标注递归树节点数

依据清楚
视频直接表达
来源依据
  1. 图示
    观察依据

    右侧递归树旁依次写出 202^0、212^1、222^2、232^3

  2. 动画
    观察依据

    手和笔逐层指向 f(7)f(7)、f(6)/f(5)f(6)/f(5)、更下层节点

图中对象
  1. f(7)f(7) 根节点

  2. f(6)f(6)、f(5)f(5) 等子节点

  3. 右侧幂次标注 202^0、212^1、222^2、232^3

变化过程
  1. 讲解者从上到下逐层指示节点

  2. 每讲完一层就在右侧补写对应的 2 的幂

不变量
  1. 树的结构保持不变

  2. 每层节点数按 2 的幂增加

数学含义

画面把抽象的递归调用次数转化为可视化的二叉树层计数。

写出最终复杂度

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    镜头回到白板左下,讲解者写下 O(2n)O(2^n)

  2. 公式
    观察依据

    O(2n)O(2^n) 出现在左下区域

图中对象
  1. O(2n)O(2^n) 记号

  2. 左侧递归公式

  3. 右侧递归树

变化过程
  1. 新增左下复杂度结论

  2. 讲解者用笔指向该记号

不变量
  1. 前面的递归树和公式仍作为依据保留在画面中

数学含义

视觉上将“树节点总数”收束为一个渐近复杂度结论。

片尾品牌动画

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    白板画面切到深蓝背景,出现搜索框、网址 www.greedyai.com、Search 按钮和 AI 标志动画

图中对象
  1. 搜索框

  2. www.greedyai.com

  3. Search 按钮

  4. AI 标志

变化过程
  1. 教学白板消失

  2. 出现品牌搜索与标志动画

不变量
  1. 无新的数学内容

数学含义

这一段是片尾包装,不再承载数学推导。

易错点 · 2

误以为朴素递归没有重复计算

依据清楚
依据视频推导
来源依据
  1. 动画
    观察依据

    递归树中出现了大量相同的节点(如多个 f(4)f(4), f(3)f(3))。

  2. 声音
    观察依据

    讲师通过不断重复“为了计算它,我们要知道...”强调了这种层层嵌套和重复。

误区

初学者可能认为递归只是简单地调用自身,没有意识到像斐波那契数列这样的双分支递归会产生指数级的重复子问题。

说明

通过绘制递归树可以清晰地看到,同一个子问题(如 f(4)f(4))会被不同的父节点多次触发计算。这正是朴素递归时间复杂度高的根本原因,也是引入记忆化搜索或动态规划的动机。(注:此为基于视频画面的合理推导,视频本身未直接点明“记忆化”等后续概念)

不要把“实际不必全画”误解为“理论规模更小”

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者说由于有基本条件 f(1)f(1) 和 f(2)f(2) 分别等于 1,所以没必要把这个树完全画出来,但从理论角度需要这么多节点

误区

看到图中没有把整棵树全部画完,就以为递归调用的理论规模也随之减少。

说明

视频明确区分:画图时可以省略,但做复杂度分析时仍按理论上的节点规模来估计。

概念关系 · 5

斐波那契数列的递归定义 → 递归树的构建方法

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲师先给出 f(n)f(n) 公式,随后立即开始画树:“为了计算 f(7)f(7) 呢,我们要知道这两项...”

应用
解释

递归树的构建方法直接应用于斐波那契数列的递归定义,将抽象的递推公式转化为直观的图形结构。

递归树节点的计算意义 → 通过计算递归树节点总数分析时间复杂度

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲师先定义“每个节点... 是一个单位的计算”,接着说“为了分析... 时间复杂度,我们只需要去看一下... 出现了多少个节点”。

先修
解释

理解“节点代表单位计算”是采用“数节点法”分析时间复杂度的先决条件和理论基础。

递归定义与递归基 → 递归树每层节点数按 2 的幂增长

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    左侧给出 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)

  2. 图示
    观察依据

    右侧立即画出对应的二叉递归树

应用
解释

视频先用递归定义建立问题,再用递归树把每次调用展开成可视化结构。

递归树每层节点数按 2 的幂增长 → 总节点数决定时间复杂度

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者先逐层数节点,再说要数整棵树有多少节点,相当于把这些值相加

  2. 公式
    观察依据

    随后写出 O(2n)O(2^n)

证明依赖
解释

总节点数的估计依赖前面得到的每层 2 的幂规律。

总节点数决定时间复杂度 → 指数级复杂度的命名

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲解者在得出 O(2n)O(2^n) 后说这种复杂度叫做指数级的复杂度

包含
解释

“指数级复杂度”是对 O(2n)O(2^n) 这一结果的命名和归类。

问题定位 · 10

如何根据递归公式画出算法的递归树?

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    完整的 f(7)f(7) 递归树绘制过程。

涉及知识点
  1. 递归树的构建方法
  2. f(7)f(7) 的递归展开过程

为什么直接用递归计算斐波那契数列效率很低?

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    树上密集的重复节点。

涉及知识点
  1. f(7)f(7) 的递归展开过程
  2. 误以为朴素递归没有重复计算

怎样通过递归树来分析递归算法的时间复杂度?

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    讲师关于数节点分析复杂度的讲解。

涉及知识点
  1. 递归树节点的计算意义
  2. 通过计算递归树节点总数分析时间复杂度

递归树中每一层的节点数量有什么规律?如何求总节点数?

依据清楚
视频直接表达
来源依据
  1. 动画
    观察依据

    讲师写下 202^0 并开始分层计数。

待核验内容
  1. 视频在此处截断,未展示完整的求和过程。

涉及知识点
  1. 通过计算递归树节点总数分析时间复杂度
  2. 开始按层分析节点数量

这段视频在分析哪个递归函数的时间复杂度?

依据清楚
视频直接表达
来源依据
  1. 公式
    观察依据

    f(n)f(n) 等于 f(n 减 1) 加上 f(n 减 2),且 f(1)f(1) 和 f(2)f(2) 都等于 1

  2. 图示
    观察依据

    f(7)f(7) 递归树

涉及知识点
  1. 递归定义与递归基
  2. f(7)f(7) 递归树示例

为什么递归树每一层的节点数是 2 的幂?

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    逐层说明第二层 2 个、第三层 4 个、第四层 8 个

  2. 图示
    观察依据

    右侧标注 202^0、212^1、222^2、232^3

涉及知识点
  1. 递归树每层节点数按 2 的幂增长

怎样从各层节点数相加得到 O(2n)O(2^n)?

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    把各层节点数相加

  2. 公式
    观察依据

    时间复杂度为 2 的 n 次方阶

涉及知识点
  1. 总节点数决定时间复杂度
  2. 由递归树层节点数推出 O(2n)O(2^n)

视频里为什么提到 2 的 0 次方加到 2 的 6 次方等于 2 的 7 次方减 1?

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    2 的 0 次方加 2 的 1 次方一直加到 2 的 6 次方等于 2 的 7 次方减 1

涉及知识点
  1. 有限几何级数示例
  2. 由递归树层节点数推出 O(2n)O(2^n)

O(2n)O(2^n) 在视频中被称作什么复杂度?

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    这种复杂度叫做指数级的复杂度

涉及知识点
  1. 指数级复杂度的命名

递归基 f(1)=f(2)=1f(1)=f(2)=1 在这段分析里起什么作用?

依据清楚
视频直接表达
来源依据
  1. 声音
    观察依据

    因为有 f(1)f(1) 和 f(2)f(2) 等于 1,所以没必要把树完全画出来

  2. 图示
    观察依据

    图中底部用省略号表示未继续展开

涉及知识点
  1. 递归定义与递归基
  2. 递归基使实际树不必完整画出
  3. 不要把“实际不必全画”误解为“理论规模更小”
覆盖情况与待核验内容

已覆盖 · 展示斐波那契数列的已知公式和初始条件,并提出计算 f(7)f(7) 的目标。

已覆盖 · 讲师逐步绘制 f(7)f(7) 的递归树,展示问题的分解过程和重复子现象。

已覆盖 · 讲师解释递归树自底向上汇总结果的“归”的过程。

已覆盖 · 定义节点为单位计算,提出通过统计节点总数来分析时间复杂度的方法。

已覆盖 · 开始按层分析节点数量,写出第一层节点数为 202^0,准备寻找规律。

已覆盖 · 讲解者逐层数 f(7)f(7) 递归树的节点,并在右侧写出 202^0、212^1、222^2、232^3。

已覆盖 · 讲解者总结每层按同样方式增加,并提出整棵树的深度和叶节点数量问题。

已覆盖 · 讲解者说明由于有递归基,实际不必把树完全画出,但理论上仍需按这么多节点估计。

已覆盖 · 讲解者把各层节点数相加,举例 202^0+...+26=27−12^6=2^7-1,并写出 O(2n)O(2^n)。

已覆盖 · 讲解者把 O(2n)O(2^n) 称为指数级复杂度,并总结这是通过树计算递归算法时间复杂度的方法。

已覆盖 · 片尾品牌动画与网址展示,无新增数学内容。

探索视频中的知识

已审核的主题路径

这个视频解答的问题

理解原因

↗
掌握方法

↗
认识概念

↗
掌握方法

↗
认识概念

↗
掌握方法

↗
理解原因

↗
理解原因

↗