当前课程知识点:数据结构(上) > 第一章 绪论(下) > (xc)动态规划 > 01XC-4: Fib():递归跟踪
我们也可以采用
我们的第二种手段
也就是递归跟踪
来对刚才那个
所谓的算法进行分析
比如说 不用多
我们只要针对
Fibonacci数第5项的计算过程
把所有递归实例
之间的调用关系 绘制出来
得到这样一幅图
我们来验证一下
为了计算出第5项
我们需要递归地计算出
第4、第3项
而为了计算出第4项
我们需要递归地
再计算出第3和第2项
诸如此类地
直到最后到平凡的情况
也就是0或者第1项
这个图能告诉我们什么呢?
如果敏锐的话
同学已经发现这个问题了
没错 这里有大量
重复的递归实例
比如说2
更不用说1
以及0等等
这还只是一个很小的一个数5
如果更多的话呢
可想而知
会有更高的重复度
那么准确地讲
应该是多少呢?
我们说其实准确地讲
每个递归实例
只需要一个就够了
大家可能都记得
以前学习Fibonacci数的时候
老师应该讲过这样的
一个很通俗的应用实例
我们来考察一个上台阶的过程
在某一个楼梯
允许你每次走一步
也可以每次走两步
当然不能更多
那么请问上到某一级
比如说第6级台阶的时候
总共有多少种走法
老师应该当时讲过
这个数字就是对应的
比如 第6阶的话
就是第6项Fibonacci数
原因在哪呢?
就是因为整个这样的一个过程
就可以描述为
为了上到第六层
我们实际上 从最后的一步来看
无非有两种走法
一种就是从第五层
通过一阶上来
或者从第四层
通过两阶上来
整个这个情况 我们说完全如此
所以概括而言
实际上 每一个递归实例
从原理上讲 只需计算一次
非常重要 只需计算一次
所以我们接下来的
诀窍和改进的方法
也就在于此
能不能按照这样一种理解
对每一个实例只计算一次
从而同样地完成
这样一个任务呢?
我们说 可以
而且完全可以
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验