java - 斐波那契算法的时间复杂度

标签 java recursion methods time-complexity fibonacci

<分区>

所以,我在 Java 中有一个递归方法来获取第 n 个斐波那契数 - 我唯一的问题是:时间复杂度是多少?我认为是 O(2^n),但我可能弄错了? (我知道迭代更好,但这是一种练习)

public int fibonacciRecursive(int n)
{
    if(n == 1 || n == 2) return 1;
    else return fibonacciRecursive(n-2) + fibonacciRecursive(n-1);
}

最佳答案

您的递归代码具有指数运行时间。但是我觉得底数不是2,大概是黄金比例(1.62左右)。但当然 O(1.62^n) 也自动为 O(2^n)。

可以递归计算运行时间:

t(1)=1
t(2)=1
t(n)=t(n-1)+t(n-2)+1

这与斐波那契数本身的递归定义非常相似。递归方程中的 +1 可能与大 n 无关。 S 我相信它的增长速度与斐波那契数大致相同,并且以黄金比例为基础呈指数增长。

您可以使用记忆化来加快速度,即缓存已经计算出的结果。然后它与迭代版本一样具有 O(n) 运行时间。


您的迭代代码的运行时间为 O(n)

您有一个简单的循环,其中包含 O(n) 步并且每次迭代的时间恒定。

关于java - 斐波那契算法的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768781/

相关文章:

java - 固定幂指数的递归方法

sql - 将平面表解析为树的最有效/优雅的方法是什么?

python - 为什么 PyQt 类的反弹方法会引发 TypeError

java - 找不到在对象类中定义的符号(方法)

Java 2D 游戏编程 : Missile shooting is too fast?

java - 除非调整 JFrame 大小,否则图像不会出现

java - 正则表达式替换除空 ("") 字符之外的所有非字母数字字符

java - 扫描仪+开关使用

javascript - 如何在不使其过于复杂的情况下解决这个复杂的 Javascript 算法?

java - 如何让我的 Action 监听器与我的计算方法进行通信,以便将文本输出到我的 GUI?