Fibonacci数列,第一个数字为0,第二个数字为1,以后的每一个数字为前两个数字之和,这就是Fibonacci数列
题目:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
第一种解法:递归
public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return Fibonacci(n-2)+Fibonacci(n-1);
}
}
递归虽然简单明了,但是经常会发生stack overflow,而且递归事实上非常非常慢。这里递归会有大量重复计算,效率太低
观察下面的过程:
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
因此使用第二种解法,用循环来替代递归
public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
int prepre = 0;
int pre = 1;
int result = 0;
for(int i = 2;i<=n;i++){
result = pre+prepre;
prepre = pre;
pre = result;
}
return result;
}
}