描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n\leq 39n≤39。
示例
输入:4
返回值:3
思路
我们都知道斐波那契数列是这样的一组数据,0、1、1、2、3、5、8、13、21、34。除第一个和第二个外,其余的都是前两个数字之和,所以,我们只需要知道前两个的数据就好了,第一个和第二个单独进行处理,我用的while,大家可以用for循环。
代码
package feifunaqie;
public class Solution {
/*
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
0、1、1、2、3、5、8、13、21、34
*/
public static int Fibonacci(int n) {
if(n==0){
return 0;
}
else if(n==1){
return 1;
}
int sum = 0;
int left = 0;
int right = 1;
int index = n - 1;
while (index!=0){
sum = right + left;
left = right;
right = sum;
index--;
}
return sum;
}
public static void main(String[] args) {
System.out.println(Fibonacci(4));
}
}
时间复杂度On(n)
空间复杂度On(1)
我看了一个别人用for循环写的,给大家看一下,思路都一样,时间复杂度和空间复杂度一样。
代码如下:
public int Fibonacci(int n) {
if(n == 0){
return 0;
}else if(n == 1){
return 1;
}
int sum = 0;
int two = 0;
int one = 1;
for(int i=2;i<=n;i++){
sum = two + one;
two = one;
one = sum;
}
return sum;
}
另一种用减法做
代码如下:
public int Fibonacci(int n) {
if(n == 0){
return 0;
}else if(n == 1){
return 1;
}
int sum = 1;
int one = 0;
for(int i=2;i<=n;i++){
sum = sum + one;
one = sum - one;
}
return sum;
}