algorithm - 为什么计算斐波那契数列的复杂度是 2^n 而不是 n^2?

标签 algorithm recursion big-o fibonacci

我正在尝试使用递归树找出斐波那契数列的复杂性,并得出树的高度 = O(n) 最坏情况,每个级别的成本 = cn,因此 复杂性 = n*n=n^2

为什么是O(2^n)

最佳答案

朴素递归斐波那契的复杂度确实是 2ⁿ。

T(n) = T(n-1) + T(n-2) = T(n-2) + T(n-3) + T(n-3) + T(n-4) = 
= T(n-3) + T(n-4) + T(n-4) + T(n-5) + T(n-4) + T(n-5) + T(n-5) + T(n-6) = ...

在每个步骤中,您调用 T 两次,从而提供最终的渐近势垒:
T(n) = 2⋅2⋅...⋅2 = 2ⁿ

bonus:斐波那契的最佳理论实现实际上是 close formula , 使用 golden ratio :

Fib(n) = (φⁿ – (–φ)⁻ⁿ)/sqrt(5) [where φ is the golden ratio]

(然而,由于浮点运算,它在现实生活中存在精度误差,不精确)

关于algorithm - 为什么计算斐波那契数列的复杂度是 2^n 而不是 n^2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547133/

相关文章:

algorithm - 生成序列的简单算法/方法

java - 解析一棵知道叶节点的所有父节点和祖先节点的树

C: x = !y 是什么意思?

javascript - 请求内递归函数调用的异步问题

recursion - 返回 Vec 的递归函数

algorithm - O(n) 中的主要点集

algorithm - 了解 AStar 算法

java - 如何正确实现 Runnable 来搜索哈希表中的元素?

javascript - React 生命周期的大 O/时间复杂度

time-complexity - 以下代码段的时间复杂度是多少?