Algorithm 打印从0到n的所有斐波那契数的时间复杂度是多少?

Algorithm 打印从0到n的所有斐波那契数的时间复杂度是多少?,algorithm,recursion,time-complexity,Algorithm,Recursion,Time Complexity,这里也有人问过同样的问题:,但我无法理解所提供的答案 下面的代码打印0到n之间的所有斐波那契数。时间复杂度是多少 void allFib(int n){ for(int i = 0 ; i < n ; i++){ System.out.println(i + ": " + fib(i)); } } int fib(int n ){ if(n <= 0) return 0; else if (n == 1) return 1;

这里也有人问过同样的问题:,但我无法理解所提供的答案

下面的代码打印0到n之间的所有斐波那契数。时间复杂度是多少

void allFib(int n){
    for(int i = 0 ; i < n ; i++){
        System.out.println(i + ": " + fib(i));
    }
}    

int fib(int n ){
    if(n <= 0) return 0;
    else if (n == 1) return 1;
    return fib(n-1) + fib(n-2);
}
void allFib(int n){
对于(int i=0;i如果(n对于编写的程序,如果
fib(n)
be
T1(n)
,程序的总时间复杂度是
T(n)=sum{i=0}^{n-1}T1(i)
。现在尝试计算
T1(i)
。根据
fib
函数的定义,
T1(i)=T1(i)=T1(i-1)+2
(一次比较)和
T1(1)=2
(两次比较)

根据之前的分析,我们知道,
T1(i)=Theta(2^i)
。因此,
T(n)=Theta(sum{i=1}{n-1}2^i)=Theta(2^n-1)=Theta(2^n)。

简单地说,如果你有n个O(2^n)的步骤,那么你的O(n×2^n)公式是正确的,但是你没有。你有n个步骤,好吧,但只有最后一个是O的步骤(2^n)。在最后一个之前的是O(2^(n-1)),在最后一个之前的是O(2^(n-2)),等等。它们都比最后一个小得多,所以它们都可以丢弃(在O()内),并且O(2^n)仍然是增长最快的项。