斐波那契数列
在求解这个函数的时候,我们最容易能想到递归,代码如下:
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,显而易见。
查看6道真题和解析