[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的值越大,成指數上的差異。

留言

這個網誌中的熱門文章

[Visual Studio]位於網際網路或是限制區域上 或是檔案上標有 web 字樣 所以無法處理該檔案。若希望處理這些檔案 請移除 web 字樣。

[IIS] IIS執行時,發生拒絕存取路徑 問題

[windows] xcopy 備份至 「網路磁碟機」