fib函数的时间复杂度分析
fib函数计算时间复杂度方式的两种方式
1.以递归的方式(时间复杂度是O(2^n))
public static int fib1(int i){
if(n<=1) return n;
return fib1(n-2)+fib(n-1);
}
对于fib(6)来说,第一行是fib(6) 是一个 第二行是fib(5)+fib(4) 是两个(2^1) 第三行是fib(4)+fib(3)和fib(3)+fib(2) 是4个L (2*2) 等等 所以复杂度是O(2的n次方)
2.以普通的方式(时间复杂度是O(n)
public static int fib2(int n) {
if (n <= 1) return n;
int first = 0;
int second = 1;
for (int i = 0; i < n - 1 ; i++) {
int sum = first + second;
first = second;
second = sum;
}
return second;
}
3.他们之间的差别
O(n) 大约耗时 6.4 ∗ 10−8 秒
O(2^n) 大约耗时 584.94 年
可见,算法的差距决定着程序的重要因素。