【发布时间】:2012-07-26 17:26:10
【问题描述】:
以下函数的 Big-O 运行时间是多少?解释一下。
static int fib(int n){
if (n <= 2)
return 1;
else
return fib(n-1) + fib(n-2)
}
另外,您将如何使用更快的 Big-O 运行时迭代地重写 fib(int n) 函数? 这是否是 O(n) 的最佳方式:
public static int fibonacci (int n){
int previous = -1;
int result = 1;
for (int i = 0; i <= n; ++i)
{
int sum = result + previous;
previous = result;
result = sum;
}
return result;
}
}
【问题讨论】:
-
在 T(n) = c + T(n-1) + T(n-2) 中求解 T(n)。
-
T(n)= T(n-1) + T(n-2) + O(1) T(n)= O(2^n-1) + O(2^n -2) + O(1) = O(2^n) 是我所拥有的。只是仔细检查自己
-
只是想全面了解如何使用大 O 和递归。
-
Big O 和递归不是特定于语言的,所以这不是一个真正的 java 问题。
-
这有点晚了,因为有人已经给出了答案并且被接受了,但是仅仅陈述问题并要求答案通常是不好的。如果您陈述问题然后告诉我们您到目前为止有什么解决方案以及您不确定的确切内容会更好。 (我认为第二个代码 sn-p 可能是您的工作,所以我的评论主要针对您问题的第一部分)
标签: java algorithm big-o fibonacci