各个oj上都能碰到斐波那契数列这种经典的问题,我的博客里面也写过斐波那契算法之类的问题,这次不讨论快速幂去解决斐波那契,这次是来优化递归来计算斐波那契
废话不多说直接上代码:
/**
*@author:StormMaybin
*@Date:0425
*@<description>练习</description>
*/
public class Fibonacci
{
public static long F (int N)
{
if (N == 0)
{
return 0;
}
if (N == 1)
{
return 1;
}
return F(N-1) + F(N-2);
}
public static void main (String [] arguments)
{
for (int N = 0;N < 50 ;N++ )
{
System.out.println(N + "的斐波那契数是 :"+F(N));
}
}
}
上面这个代码就是最常规的递归调用,这50组数据,我测了大概一分钟才全部算出结果,要是更大一点,100,200呢?可想而知肯定炸了,下面来优化一下递归来提高速度
public clamias Fibonacci
{
public static void main(String[] args)
{
long [] A = new long[50];
for (int N = 0;N < 50 ;N++ )
{
System.out.println(N + "的斐波那契数是 :"+F(A,N));
}
}
/*下面这个函数要这样写的话,运行速度很慢,所以可以稍微改动一下代码来提高运行速度!
*这个程序开始时候不是这样的,这是修改过的数组是用来储存计算完的结果,下次调用的时候直接
*用数组里面的结果,省得递归去浪费时间!
*/
public static long F(long [] A , int n)
{
if (n == 0)
{
A[n] = 0;
return A[n];
}
else if (n == 1)
{
A[n] = 1;
return A[n];
}
else
{
A[n] = A[n-1] + A[n-2];
return A[n];
}
}
}
代码经过这样的优化,变成秒出结果!