已知一个数列的前几位数为,1,1,2,3,5,8,13,21,34.求第30位的数和100位的数。
初看,这不是费波拿切数列 ,许多人都会说很简单的,直接用递归算法,其实,你自己有没有想过更好的方法呢,递归调用算法的效率狂低,算100位的时候要等很久很久,这里使用递推算法,你会发现运算效率会有质的提高。
static long CC(int n,long i, long j)
{
if (n == 1 || n == 2)
return 1;
else
return CC(n-1,j,i+j)+j;
}
static long CC(int n)
{
if (n == 1 || n == 2)
return 1;
else
return CC(n - 1) + CC(n - 2);
}
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine("{0},{1}", CC(40, 0, 1), CC(100, 0, 1));
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine(CC(40));
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.ReadLine();
}
去看一下效率比较..........