Big o 大O符号-Fibonnaci-破解编码面试示例14,第53页
我正在读《破解编码面试》一书,第六章大(O)。在第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)
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)和下界的内容,你的思想就会清晰,这将有助于你理解上界和下界情况下的时间复杂度变化。