题解 | #斐波那契数列#
斐波那契数列
http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3
描述
自己想到的解法: 递归实现
public class Solution {
public int Fibonacci(int n) {
if(n==1||n==2){
return 1;
}else{ // n>2
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
}
- 优点,代码简单好写
- 缺点:慢,数字太大会超时
- 时间复杂度:O(2^n)
- 空间复杂度:递归栈的空间
拿求f[5] 举例:
通过图会发现,方法一中,存在很多重复计算.
解法二:循环实现
public class Solution {
public int Fibonacci(int n) {
// 第n-1个数
int preNum=1;
// 第n-2个数
int prePreNum=0;
int result=0;
if(n==0)
return 0;
if(n==1)
return 1;
for(int i=2;i<=n;i++){
// f(result)= f(n-1)+ f(n-2) n=2
result=preNum+prePreNum; // f(2)=f(1)+f(0) =1+0=1
// 交换
prePreNum=preNum; // f(0)=f(1)=1;
preNum=result; // f(1)=f(2)=1;
}
return result;
}
}