图片说明
在求解这个函数的时候,我们最容易能想到递归,代码如下:

public static void main(String[] args) {


        long startTime = System.currentTimeMillis(); //程序开始记录时间

        System.out.println(Fibon(10));
        long endTime = System.currentTimeMillis(); //程序结束记录时间

        long TotalTime = endTime - startTime;//总消耗时间
        System.out.println(TotalTime);

    }
public static long Fibon(int n){
        if(n<=0)
            return 0;
        if(n==1)
            return  1;
        return Fibon(n-1)+Fibon(n-2);

}

但是在我们将n设为50的时候,就发现根本难以计算出来,因为在我们计算时,会有很多重复,而且随着数字的增大,计算量以几何数量增大,这时候,我们就要想一个好的算法

public static long Fibonaccif(int n){
       if(n==0)
           return 0;
       if(n==1)
           return 1;
       else{
        int[] f=new int[n+1];
        f[0]=0;
f[1]=1;
for(int j=2;j<f.length;j++)
{
    f[j]=f[j-1]+f[j-2];
}
return f[n];
    }
    }

这个方法虽然占用了数组的空间,但是,大大缩短了时间
当n=39时
图片说明
而当n=45时
图片说明
可以看到,递归用了6秒多,而循环只用了0,显而易见。