算法学习之递归算法学习之斐波拉契

输出Fibonacci的第n项,要求时间复杂度要低

1
2
3
4
5
6
7
public int fibonacci(int n)
{
if(n<0) return 0;
if(n<=2) return 1;
else{
return fibonacci(n-1)+fibonacci(n-2);
}

但是这种递归方法的时间复杂度太高

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public int fibonacci_01(int n)
{
if(n<0) return 0;
else if((n<=2) return 1;
else
{
int a = 1,b = 1,c = 0;
for(int i = 0;i<=n;i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
}

这样改变之后时间复杂度就变成了O(n)了。