大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
方法很多,最简单的方法就是按照斐波那契数列递归计算。
public class Solution {
public int Fibonacci(int n) {
if(n<2){
return n;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
时间复杂度:O(2^n);
空间复杂度:O(1);
再来一种优化完的方法:
思路:因为第n个数就是n-1与n-2的和,所以我们可以根据n-1与n-2得到结果(并且此处使用sum变量替换了one后边的一位数tow,sum担任了两个责任)
public class Solution {
public int Fibonacci(int n) {
if(n<2){
return n;
}
int one = 0;
int sum = 1;
for(int i = 2;i<=n;i++){
sum = sum+one;
one = sum-one;
}
return sum;
}
}
时间复杂度:O(n);
空间复杂度:O(1);
练习地址:https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3