java - 递归和迭代 fib 函数的大顺序?

标签 java algorithm big-o

我被要求以最有效的方式编写一个 fib 函数?

这是我提供的实现:

public static int fib(int n)
{
    int prev1 = 1, prev2 = 1, ans = 1, i = 3;

    while (i <= n)
    {
        ans = prev1 + prev2;
        prev1 = prev2;
        prev2 = ans;
        i++;
    }
    return ans;
}

这是最有效的吗?什么是大订单?

我还被要求给出递归实现的大 O 符号:

public static int recursiveFib(int n)
{
    if (n <= 2)
        return 1;
    else
        return recursiveFib(n-1) + recursiveFib(n - 2);
}

我认为这是指数 2^n,这就是它效率低下的原因。

最佳答案

您的实现是 O(n),并且是实现 Fibonacci 函数的正常方式。递归定义是 O(fib(n)) 除非使用内存或类似方法。

还有一个Closed form expression斐波那契数列,以及 This link有一些更快的 fib 函数的实现。

关于java - 递归和迭代 fib 函数的大顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958221/

相关文章:

java - facesContext.getExternalContext().getRequest().getSession() 的返回对象是什么类?

java - 用于确定主页部分的简洁架构用例——已更新

java - 检查是否未使用 Mockito 调用方法

javascript - 如何从 JavaScript 中的字符串生成树

javascript - 递归打印字符串的所有排列(Javascript)

Big-O - 函数的增长率

java - 在 Linux 中使用 Java 运行 CPU 利用率命令

algorithm - 枚举笛卡尔积同时最小化重复

algorithm - 在程序中寻找循环不变式来计算立方和?

algorithm - 内循环依赖于外循环的复杂性