[C#]費氏數列(Fibonacci sequence) 程式邏輯
定義:
實作:
參數:輸入10
1.依輸入的項目數量顯示數列
Console.WriteLine("請輸入要顯示的費氏數列項目數量");
var input = Console.ReadLine();
//將字串轉為int
var num = int.TryParse(input, out int output) ? output : 0;
var a = 0;
var b = 1;
Console.WriteLine($"第1項:{b}");
for (var i = 2; i <= num; i++)
{
var temp = a + b;
Console.WriteLine($"第{i}項:{temp}");
a = b;
b = temp;
}
2.依輸入的項次取得該項次值
static void Main(string[] args)
{
Console.WriteLine("請輸入要顯示的費氏數列項目數量");
var input = Console.ReadLine();
//將字串轉為int
var num = int.TryParse(input, out int output) ? output : 0;
Console.WriteLine($"遞迴寫法 取得的值:{F(num)}");
Console.WriteLine($"動態規劃寫法 取得的值:{F(num)}");
Console.ReadLine();
}
*遞迴寫法
/// <summary>
/// 遞迴寫法
/// </summary>
/// <param name="n">第幾項</param>
/// <returns></returns>
static int F(int n)
{
if (n <= 2)
{
return 1;
}
return F(n - 1) + F(n - 2);
}
*動態規劃寫法
/// <summary>
/// 動態規劃寫法
/// </summary>
/// <param name="n">第幾項</param>
/// <returns></returns>
static int DynamicF(int n)
{
if (n <=2)
{
return 1;
}
int[] array = new int[n];
array[0] = 1;
array[1] = 1;
for(var i=2;i<n;i++)
{
array[i] = array[i-1]+ array[i - 2];
}
return array[n - 1];
}
ps:這邊要介紹「遞迴寫法」與「動態規劃寫法」的原因是因為在輸入的項目數量越大的話會有效能上的顯著差異。
實際上的原因是因為「遞迴寫法」會重複計算許多之前已經計算過且知道答案的值,而「動態規劃寫法」會將我們已經計算過的結果儲存起來,因此在「時間複雜度(Time Complexity)」上會隨著input的值越大,成指數上的差異。
留言
張貼留言