1. 程式人生 > >斐波那契數列的三種寫法

斐波那契數列的三種寫法

abc寫法

            Console.WriteLine("你想得到的斐波那契數列長度:");
            int len = int.Parse(Console.ReadLine());//長度
            int a = 0, b = 1;//a代表第一項,b代表第二項
            for (int i = 0; i < len; i++)
            {
                if (i == 0)//輸出第一項
                {
                    Console.WriteLine("第{0}項:{1}", i, a);
                }
                else if (i == 1)//輸出第二項
                {
                    Console.WriteLine("第{0}項:{1}", i, b);
                }
                else
                {
                    int c = a + b;//c代表第三項,第三項等於第一項加第二項
                    //0     1   1
                    //1     2   3   這裡代表第幾項
                    //a     b   c   這裡是這一次,這一次計算出了第三項,我們要為下一次計算第三項做準備

                    //下一次
                    //0     1   1   2
                    //      1   2   3   第幾項
                    //      a   b   c   abc應該代表的值

                    //再下一次
                    //0     1   1   2   3
                    //          1   2   3   第幾項
                    //          a   b   c   abc應該代表的值

                    //0     1   1   2   3   5   8
                    //a     b   c
                    //      a   b   c
                    //          a   b   c
                    //              a   b   c
                    //                  a   b   c

                    a = b;//第一項
                    b = c;//第二項
                    Console.WriteLine("第{0}項:{1}", i, c);//輸出
                }
            }

陣列寫法

            Console.WriteLine("你想得到的斐波那契數列長度:");
            int len = int.Parse(Console.ReadLine());//長度
            int[] arr = new int[len];//宣告一個長度為len的陣列
            arr[0] = 0;//初始化第一項為0
            arr[1] = 1;//初始化第二項為1
            Console.WriteLine("第{0}項:{1}", 0, arr[0]);//輸出
            Console.WriteLine("第{0}項:{1}", 1, arr[1]);//輸出
            for (int i = 2; i < len; i++)//迴圈,從2開始到len結束
            {
                arr[i] = arr[i - 1] + arr[i - 2];//第i項為前兩項的和
                //假設i=2時
                //arr[2]=arr[2-1]+arr[2-2];
                //arr[2]=arr[1]+arr[0];
                //arr[2]=1+0;
                //arr[2]=1;
                //假設i=3時
                //arr[3]=arr[3-1]+arr[3-2];
                //arr[3]=arr[2]+arr[1];
                //arr[3]=1+1;
                //arr[3]=2;
                Console.WriteLine("第{0}項:{1}", i, arr[i]);//輸出
            }

遞迴做法

			Console.WriteLine("你想得到的斐波那契數列長度:");
            int len = int.Parse(Console.ReadLine());
            for (int i = 0; i < len; i++)
            {
                Console.WriteLine("第{0}項:{1}", i, f(i));
                //f(0)=0;
                //f(1)=1;
                //f(2)=1;
                
                //f(3)=f(3-1)+f(3-2);
                //=f(2)+f(1);
                //=1+1;
                //=2;
				
				//f(4)=f(4-1)+f(4-2);
				//=f(3)+f(2);
				//=f(3-1)+f(3-2)+f(2);
				//=f(2)+f(1)+f(2);
				//=1+1+1;
				//=3;
            }

//函式
        public static int f(int n) {
            if (n <= 0)
            {
                return 0;
            }
            else if (n == 1 || n == 2)
            {
                return 1;
            }
            else {
                return f(n - 1) + f(n - 2);
            }
        }