Big o 大O符号-Fibonnaci-破解编码面试示例14,第53页

Big o 大O符号-Fibonnaci-破解编码面试示例14,第53页,big-o,Big O,我正在读《破解编码面试》一书,第六章大(O)。在第53页,作者展示了这段代码并问道:它的时间复杂度是多少 void allFib(int n) { for (int i = 0; i < n; i++) { System.out.println(i + ": " + fib(i)); } } int fib(int n) { if (n <= 0)

我正在读《破解编码面试》一书,第六章大(O)。在第53页,作者展示了这段代码并问道:它的时间复杂度是多少

    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为n=2,则将执行代码行下面的代码

return fib(n - 1) + fib(n - 2);
else if (n == 1)
if (n <= 0)
上述代码执行行将分为两个步骤。一个步骤用于fib(2-1),一个步骤用于fib(2-2)。因此,总计=执行了2个步骤

由于代码行中的两个术语已解析为实际值,因此不再需要执行递归操作:


现在值为1和0,相对于值1,将执行下一行

return fib(n - 1) + fib(n - 2);
else if (n == 1)
if (n <= 0)
在代码行上方添加了一个执行步骤。现在,总步骤数=3

同样,现在只剩下0个值,代码行下面的值0将被执行

return fib(n - 1) + fib(n - 2);
else if (n == 1)
if (n <= 0)

if(n您对
步骤的定义是什么?
?作者没有具体说明,但我猜它是语句/指令,这就是为什么他说fib(1)=2(它必须经过两个if)“现在值是1和0,相对于值1,下面的行将被执行,否则如果(n==1)”.对我来说,这是不正确的,因为第一个条件也是经过评估的(如果对我来说,如果条件为true,则将执行一条语句,否则将忽略此语句,而不执行任何操作。因此,当n==1时,它将首先计算第一个条件,即n0,因此当下一个n==1语句将被计算时,此语句将终止,并且由于该语句为true,它将执行一个步骤,即返回1We双方agree“如果”中的语句(斐波那契级数的时间复杂度是2^n+1。如果n=2,那么根据你的观察,它应该分5步,而不是4步,但根据作者的说法,它等于2^n,而不是2^n+1。基本上,当我们谈论大O符号时,计算的时间复杂度总是不精确的1,常数复杂度总是只跳过变量复杂度co这是因为常量在大O符号中没有值。如果你阅读了关于上界(大O)和下界的内容,你的思想就会清晰,这将有助于你理解上界和下界情况下的时间复杂度变化。