题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n<=39
解答:
斐波那契数列特特点是前两项为1,后面所有项都是前两项之和。即当n>=2时,有A(n)=A(n-1)+A(n-2)
根据这个公式很自然的想到递归法:
public class Solution {
public int Fibonacci(int n) {
int result;
if(n<=0) return 0;
if(n==1) return 1;
if(n==0) return 1;
result=Fibonacci(n-1)+Fibonacci(n-2);
return result;
}
}
递归写的很爽,就是性能有点差,每得到一个A(n)都需要计算到A(0)和A(1)才会结束递归,重复计算的次数太多了。
用循环来代替递归:当n>=2时,每一项都是前两项之和,那就一直加下去。
public class Solution {
public int Fibonacci(int n) {
int preNum=1;
int prePreNum=0;
int result=0;
if(n==0)
return 0;
if(n==1)
return 1;
for(int i=2;i<=n;i++){
result=preNum+prePreNum;
prePreNum=preNum;
preNum=result;
}
return result;
}
}