大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39。
思路分析:
斐波那契数列,第一反应是用递归的方式写,但是写完后发现程序运行超时,f(n)=f(n-1)+f(n-2)。在递归时没有记录之前的结果,有大量的重复运算
以f(4)为例。
f(4)=f(3)+f(2)
=f(2)+f(1)+f(1)+f(0)
=f(1)+f(0)+f(1)+f(1)+f(0)
递归方式
public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}
else if(n==1){
return 1;
}
else{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
}
优化的思路是采用for循环的形式,记录下之前两次的结果,能加快运算的速度。
public class Solution {
public int Fibonacci(int n) {
int prenum1=0;
int prenum2=1;
int result=0;
if(n==0){
return 0;
}
else if(n==1){
return 1;
}
else{
for(int i=2;i<=n;i++){
result=prenum1+prenum2;
prenum1=prenum2;
prenum2=result;
}
return result;
}
}
}