剑指offer--斐波那契数列

问题描述

   大家都知道斐波那契数列[   f(n)=0,n=0;f(n)=1,n=1;f(n)=f(n-1)+f(n-2),n>1   ],现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

解题思路

   看到这道题的第一眼,往往想到的是用递归算法去解,但是递归算法是非常慢的,因为重复的计算太多。以求f(10)为例,下图是用树表示的依赖关系,树中很多结点是重复的,而且重复的结点数会随着n的增大而急剧增加。

    方法:从下往上计算,首先根据f(1)和f(0)计算出f(2),再根据f(2)和f(1)计算出f(3)......以此类推便可计算出第n项。这种算法的时间复杂度是O(n)

代码

public class Solution {
    public int Fibonacci(int n) {
        if(n<2)
            return n;
        int fibNMinusOne = 0;
        int fibNMinusTwo =1;
        int fibN = 0;
        for(int i=2;i<=n;i++){
            fibN = fibNMinusOne+fibNMinusTwo;
            fibNMinusOne = fibNMinusTwo;
            fibNMinusTwo = fibN;
        }
        return fibN;
    }
}

 

posted @ 2018-08-02 21:50  菠菜汤圆  阅读(148)  评论(0编辑  收藏  举报