算法篇----斐波拉契数列问题

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。

  
    
using System;
using System.Collections.Generic;
namespace NET.MST.Thirteenth.Phabe
{
/// <summary>
/// 使用Phabe类型
/// </summary>
class MainClass
{
static void Main( string [] args)
{
// 计算第50个元素
Console.WriteLine( " 第50个元素是:{0} " , Phabe.GetNumber( 39 ));
// 计算第10个调用,这个调用将迅速返回,因为结果已经在第一次调用中被计算出来
Console.WriteLine( " 第10个元素是:{0} " , Phabe.GetNumber( 9 ));
Console.Read();
}
}
/// <summary>
/// 斐波拉契数列类型
/// 该类型不能被实例化
/// </summary>
static class Phabe
{
// 静态列表,用以存储已经计算得到的数列
private static List < long > _phabe;
/// <summary>
/// 初始化器
/// </summary>
static Phabe()
{
// 初始化数列,在一开始使该数列只包含2个元素
_phabe = new List < long > ();
_phabe.Add(
1 );
_phabe.Add(
1 );
}
/// <summary>
/// 在已经得到的计算结果上,进一步计算斐波拉契数列
/// </summary>
/// <param name="to"> 计算到第to个元素 </param>
private static void Update( int to)
{
// 循环计算,直至得到第to个元素
while (_phabe.Count <= to)
{
int count = _phabe.Count;
// 利用斐波拉契数列的定义进行计算
long temp = _phabe[count - 1 ] + _phabe[count - 2 ];
_phabe.Add(temp);
}
}
/// <summary>
/// 唯一的公开接口,获得第index个元素
/// </summary>
/// <param name="index"> 希望获取的元素的下标 </param>
/// <returns> 返回第index个元素的值 </returns>
public static long GetNumber( int index)
{
// 如果该元素已经在以前被计算,则直接从内存中读取
// 否则则需要延长内存中的斐波拉契数列
if (_phabe.Count < (index + 1 ))
Update(index); ;
return _phabe[index];
}
}
}

你可能感兴趣的:(算法)