1、题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
2、思路:斐波那契公式
由公式可知,这是典型的递推公式,后一项等于前两项相加。若我们直接计算f(10),那就要从上往前不断的推,求解过程如下图
这样中间结果中有大量的重复计算,并且重复的节点会随着n的增大而急剧就是说其计算量会随着n的增大而急剧增大。
正确的解决方式就是从下往上进行计算,首先根据f(0)和f(1)算出f(2),然后再根据f(1)、f(2)算出f(3),依次往上算,就不会有重复的计算,时间复杂度O(n)。
3、代码
public class Solution { public int Fibonacci(int n) { int pre=1; int prepre=0; int result=0; if(n==0){ return 0; } if(n==1){ return 1; } for(int i=2;i<=n;i++){ result=pre+prepre; prepre=pre; pre=result; } return result; } }