题目描述:
    所述 斐波那契数,通常表示为 F(n) 形式的序列,称为 斐波纳契数列,使得每个数字是两个前述者的总和,起始01
    F(0)= 0,F(1)= 1
    对于N> 1.F(N)= F(N-1)+ F(N-2)
    给定N,计算F(N)

    题目示例:
    范例1:
    输入: 2
    输出: 1
    说明: F(2)= F(1)+ F(0)= 1 + 0 = 1。

    范例2:
    输入: 3
    输出: 2
    说明: F(3)= F(2)+ F(1)= 1 +1 = 2。

    范例3:
    输入: 4
    输出: 3
    说明: F(4)= F(3)+ F(2)= 2 +1 = 3。

    读题可知:
    这是一个斐波那契数序列,已知条件是F(0)= 0,F(1)= 1,

    思考:
    F(0)= 0,F(1)= 1
    对于N> 1.F(N)= F(N-1)+ F(N-2)
    可以知道N>1符合公式
    这一项=前二个项相加。所以这是一个三个数都在变的并且关系是F(N)= F(N-1)+ F(N-2)。

    代码一(平推):
    class Solution {
    public int fib(int N) {
    if(N < 1 || N > 92)
    return 0;
    int a = 1;
    int b = 1;
    int temp;
    for(int i = 3; i <= N; i++) {
    temp = a;
    a = b;
    b += temp;
    }
    return b;
    }
    }

    代码二(递归):
    /*
    递归方法实现
    f(n) = f(n - 1) + f(n - 2)
    最高支持 n = 92 ,否则超出 Long.MAX_VALUE
    @param N n
    @return f(n)
    */
    public static int recursion(int N) {
    if(N<1) {
    return 0;
    }
    else if(N<3) {
    return 1;
    }
    return recursion(N-1)+recursion(N-2);
    }

    代码三(递归+缓存):
    带有缓存的方法,比recursion方法性能好很多
    static long[] l = new long[93];
    static {
    l[1] = 1;
    }
    public static long fibBuffRec(int num) {
    if(num < 1 || num > 92)
    return 0;
    if(l[num] == 0)
    l[num] = fibBuffRec(num - 1) + fibBuffRec(num - 2);
    return l[num];
    }