题目
斐波那契数列的定义为: $F_{1}=1$,$F_{2}=1$,$F_{n}=F_{n-1}+F_{n-2}$$(n\geq 3)$ 。现在用如下程序来计算斐波那契数列的第 $n$ 项,其时间复杂度为( )。
F(n):
if n<=2 return 1
else return F(n-1) + F(n-2)
答案:C
考点
解题思维
这题其实就考递归树和递推式两个视角,只要意识到每次调用都会分叉成两路,就能直接看出是指数级爆炸,别被‘斐波那契本身是 O(n)’的直觉带偏。
常见错误
最容易选错 A 或 B,觉得递归 n 次或 n²次就够了。其实递归不是简单循环,每层都要拆成两个子问题,调用次数会像树枝一样疯狂分叉。另一种常见错误是以为斐波那契本身是 O(n)(指用循环实现的迭代版本),但题目明确是递归实现,必须按递归树或递推式来算。
详细解析(节选)
考察知识点
递归函数、时间复杂度分析、斐波那契数列
概念定义
- 时间复杂度:算法执行时间随输入规模增长的增长率,用大 O 表示法描述上界。
- 递归斐波那契:$F(n) = F(n-1) + F(n-2)$,未做任何优化(无记忆化)。
- 递推关系法分析时间:设$T(n)$为计算$F(n)$所需时间,则$T(n) = T(n-1) + T(n-2) + O(1)$。
同考点真题
- 第 12 题· NOIP 2007 普及组初赛试题 · 答案 A看解析 →
- 第 16 题· NOIP 2007 普及组初赛试题 · 答案 D看解析 →
- 第 28 题· NOIP 2007 普及组初赛试题 · 答案 return(dr<tr+s)&&(dc<tc+s)dr<tr+s&&dc<tc+schessboard(tr,tc,tr+s-1,tc+s-1,s)chessboard(tr,tc+s,tr+s-1,tc+s,s)chessboard(tr+s,tc,tr+s,tc+s-1,s)chessboard(tr+s,tc+s,tr+s,tc+s,s)看解析 →
- 第 20 题· NOIP 2007 提高组初赛试题 · 答案 AC看解析 →
- 第 11 题· NOIP 2008 普及组初赛试题 · 答案 D看解析 →