Java fib递归的大O表示法
以下函数的Big-O运行时是什么?解释一下Java fib递归的大O表示法,java,algorithm,big-o,fibonacci,Java,Algorithm,Big O,Fibonacci,以下函数的Big-O运行时是什么?解释一下 static int fib(int n){ if (n <= 2) return 1; else return fib(n-1) + fib(n-2) } 静态整数fib(整数n){ 如果(n证明 将计算Fib(n)的时间函数建模为计算Fib(n-1)的时间加上计算Fib(n-2)的时间加上将它们相加的时间(O(1)) T(n证明 将计算Fib(n)的时间函数建模为计算Fib(n-1)的时间加上计算Fib(
static int fib(int n){
if (n <= 2)
return 1;
else
return fib(n-1) + fib(n-2)
}
静态整数fib(整数n){
如果(n证明
将计算Fib(n)
的时间函数建模为计算Fib(n-1)
的时间加上计算Fib(n-2)
的时间加上将它们相加的时间(O(1)
)
T(n证明
将计算Fib(n)
的时间函数建模为计算Fib(n-1)
的时间加上计算Fib(n-2)
的时间加上将它们相加的时间(O(1)
)
T(n)=c+T(n-1)+T(n-2)。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和递归有一个全面的了解。大O和递归不是特定于语言的,所以这不是一个真正的java问题。这有点晚了,因为有人已经给出了答案,并且被接受了,但是仅仅陈述问题并要求answ通常是不好的呃,如果你先陈述问题,然后告诉我们目前为止你有什么解决方案以及你不确定的是什么(我认为第二个代码片段可能是你的工作,所以我的评论主要针对问题的第一部分)解决T(n)in T(n)=c+T(n-1)+T(n-2)。T(n)=T(n-1)+T(n-2)+O(2^n-2)+O(1)=O(2^n)这就是我所拥有的。我只是反复检查我自己,只是试图对使用大O和递归有一个全面的了解。大O和递归不是特定于语言的,所以这不是一个真正的java问题。这有点晚了,因为有人已经给出了答案,并且被接受了,但是仅仅陈述问题并要求answ通常是不好的呃。如果你先陈述问题,然后告诉我们你目前有什么解决方案,以及你不确定的具体内容,那就更好了。(我认为第二段代码可能是你的工作,所以我的评论主要针对你问题的第一部分)正是我所拥有的。太棒了。谢谢你的帮助。只是想再检查一下。正是我所拥有的。太棒了。谢谢你的帮助。只是想再检查一下。
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;
}
}
int prev1=0, prev2=1;
for(int i=0; i<n; i++) {
int savePrev1 = prev1;
prev1 = prev2;
prev2 = savePrev1 + prev2;
}
return prev1;