在leetcode 上刷到了一个求斐波那契数列的题:我分别用了两种比较简单的方法,得到了两种不同的结果,使我略有思考。
第一种(递归):
class Solution {
public int fib(int n) {
if (n<2) return n;
return fib(n-1)+fib(n-2);
}
}
得到的结果为:
如上图所示递归消耗的时间较久,时间复杂度稍高。
第二种(for循环):
class Solution {
public int fib(int n) {
if (n<2) return n;
int a1=0,a2=1,result=0;
for(int i =2 ;i<n+1;i++){
result = a1+a2;
a1 = a2;
a2 = result;
}
return result;
}
}
得到的结果为:
使我惊讶的是,for循环执行的速度竟然如此之快,内存消耗也比递归的方法稍微少一些。
for循环的时间复杂度是O(n),此题中递归的时间复杂度肯定是比O(n)要高的。
心得体会:
for循环的时间复杂度是比较低的,而递归算法需要递归下去然后再回溯上来,执行时间往往是略长的。