斐波纳契函数的复杂性顺序

时间:2016-02-08 01:45:40

标签: complexity-theory fibonacci

我有以下三种给出Fibonacci数的算法。我想知道如何能够找出它们的复杂性顺序。有谁知道我怎么能确定这个?

Method 1
------------------------------------------------------------------------
long long fibb(long long a, long long b, int n) {
    return (--n>0)?(fibb(b, a+b, n)):(a);
}

Method 2
------------------------------------------------------------------------
long long int fibb(int n) {
    int fnow = 0, fnext = 1, tempf;
    while(--n>0){
        tempf = fnow + fnext;
        fnow = fnext;
        fnext = tempf;
        }
        return fnext;   
}

Method 3
------------------------------------------------------------------------
long long unsigned fib(unsigned n) {
    return floor( (pow(PHI, n) - pow(1 - PHI, n))/sqrt(5) );
}

如果我错了,请纠正我,但我的猜测是方法一是O(2^n),因为它是递归的,medtod 2将是O(n)而最后一个将是O(1)

1 个答案:

答案 0 :(得分:1)

方法1和2具有复杂性O(n)。原因很简单:

  • 方法1精确地递归n-1次,每次递归都执行简单的算术运算。
  • 方法2完全迭代n-1次,每次迭代都有恒定时间,再次简单数学。

方法3确实具有O(1)的复杂度,但可能无法计算正确的值,仅仅是近似值。