?斐波那契數(shù)列:{1,1,2,3,5,8,13,21...}
- 遞歸算法扛稽,耗時(shí)最長(zhǎng)的算法瓮孙,效率很低盗尸。
public static long CalcA(int n)
{
if (n <= 0) return 0;
if (n <= 2) return 1;
return checked(CalcA(n - 2) + CalcA(n - 1));
}
- 通過(guò)循環(huán)來(lái)實(shí)現(xiàn)
public static long CalcB(int n)
{
if (n <= 0) return 0;
var a = 1L;
var b = 1L;
var result = 1L;
for (var i = 3; i <= n; i++)
{
result = checked(a + b);
a = b;
b = result;
}
return result;
}
- 通過(guò)循環(huán)的改進(jìn)寫法
public static long CalcC(int n)
{
if (n <= 0) return 0;
var a = 1L;
var b = 1L;
for (var i = 3; i <= n; i++)
{
b = checked(a + b);
a = b - a;
}
return b;
}
- 通用公式法
/// <summary>
/// F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public static long CalcD(int n)
{
if (n <= 0) return 0;
if (n <= 2) return 1; //加上谜疤,可減少運(yùn)算佃延。
var a = 1 / Math.Sqrt(5);
var b = Math.Pow((1 + Math.Sqrt(5)) / 2, n);
var c = Math.Pow((1 - Math.Sqrt(5)) / 2, n);
return checked((long)(a * (b - c)));
}
OK,就這些了夷磕。用的long類型來(lái)存儲(chǔ)結(jié)果履肃,當(dāng)n>92時(shí)會(huì)內(nèi)存溢出。