【发布时间】:2017-04-09 17:27:14
【问题描述】:
首先 - 是的,我知道有很多类似的问题,但我仍然不明白。
所以这段代码的 Big-O 表示法是 O(2^n)
public static int Fibonacci(int n)
{
if (n <= 1)
return n;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
即使我使用 6 来运行它,函数也会被调用 25 次,正如您在这张图片中看到的那样:
Fibonacci 不应该是 64 因为 O(2^6) = 64 吗?
【问题讨论】:
-
那个代码是错误的,它给
Fib(0)是0,而它应该是1 -
@Alexander 这取决于您是引用
fib(0) = fib(1) = 1还是fib(1) = fib(2) = 1,两者都可以 - 仅取决于您从哪里开始索引。 -
感谢您指出这一点。
-
另外:
O(2^(n - 1))仍然是O(2^(n))。当n接近无穷大时,n会胜过常数的偏移量。
标签: recursion time-complexity fibonacci