一、题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
斐波那契数列是什么?
- F(0)=0
- F(1)=1
- F(n)=F(n-1)+F(n-2)
二、思路分析及代码实现
1. 方法一:递归
直接按照上述的斐波那契数列的定义来书写代码
public class Solution {
public int Fibonacci(int n) {
if(n==0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
2. 方法二:非递归
主要思路同上,只不过递归部分采用for循环实现。
public class Solution {
public int Fibonacci(int n) {
if(n==0)
return 0;
if(n==1)
return 1;
int pre0=0;
int pre1=1;
int fib=0;
for(int i=2;i<=n;i++){
fib=pre0+pre1;
pre0=pre1;
pre1=fib;
}
return pre1;
}
}
3. 方法三:优化非递归
上述代码中的fib相当于一个记录上一次计算结果的值,减少变量进行优化。
public class Solution {
public int Fibonacci(int n) {
if(n == 0)
return 0;
if(n == 1)
return 1;
int sum = 1;
int pre = 0;
for(int i=2;i<=n;i++){
sum = sum + pre;
pre = sum - pre;
}
return sum;
}
}