斐波拉契數列(1,1,2,3,5,8,13,21,34,55,89......)


斐波拉契數列:

  1,1,2,3,5,8,13,21,34,55,89......

  n=1或n=2時,1

   n>2 時,An=A(n-1)+A(n-2);

 

兩種實現方法:

遞歸:這是面試官更想要的結果,盡管實現方式很多

 1  #region 遞歸實現
 2         /// <summary>
 3         /// recursive 遞歸
 4         /// </summary>
 5         public static int Recursive(int position)
 6         {
 7             if (position == 1 || position == 2)
 8                 return 1;
 9             else
10                 return Recursive(position - 1) + Recursive(position - 2);
11         }
12         #endregion
遞歸

 

While循環:使用python語音寫這個方法,代碼會少很多(使用   a,b = b,a+b 一句代碼代替了 數據換位操作)

 1 #region 循環實現
 2         /// <summary>
 3         /// While循環
 4         /// </summary>
 5         /// <param name="position"></param>
 6         /// <returns></returns>
 7         public static int WhileMath(int position)
 8         {            
 9             int curr=1; //n
10             int firstNum = 0;//a
11             int SeondNum = 1;//b
12 
13             int tmp = 0;
14             while (curr < position)                
15             {
16                 Console.Write(string.Format("{0,5},",SeondNum));
17 
18                 tmp = firstNum;
19                 firstNum=SeondNum;
20                 SeondNum+=tmp;
21 
22                 curr++;
23             }
24             Console.Write(string.Format("{0,5},", SeondNum));
25 
26             Console.Write("\n");
27             return SeondNum;
28         }
29         #endregion
while循環

 

示例代碼:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 /*
 7  * 1,1,2,3,5,8,13,21,34,55,89......
 8  * 
 9  * n>2:An=A(n-1) + A(n-2)
10  * */
11 namespace 斐波拉契數列
12 {
13 
14     class Program
15     {
16         static void Main(string[] args)
17         {
18             Console.WriteLine("斐波拉契數列:\n  1,1,2,3,5,8,13,21,34,55,89,144......");
19             //使用遞歸實現:
20             Console.WriteLine("遞歸實現:");
21             Console.WriteLine(string.Format("n=5,value={0}", Recursive(5)));
22             Console.WriteLine(string.Format("n=10,value={0}", Recursive(10)));
23             Console.WriteLine();
24             //使用循環實現
25             Console.WriteLine("while循環實現:");
26             Console.WriteLine(string.Format("n=5,value={0}", WhileMath(5)));
27             Console.WriteLine(string.Format("n=10,value={0}", WhileMath(10)));
28             Console.WriteLine();
29 
30             Console.Read();
31 
32         }
33 
34         #region 遞歸實現
35         /// <summary>
36         /// recursive 遞歸
37         /// </summary>
38         public static int Recursive(int position)
39         {
40             if (position == 1 || position == 2)
41                 return 1;
42             else
43                 return Recursive(position - 1) + Recursive(position - 2);
44         }
45         #endregion
46 
47         #region 循環實現
48         /// <summary>
49         /// While循環
50         /// </summary>
51         /// <param name="position"></param>
52         /// <returns></returns>
53         public static int WhileMath(int position)
54         {            
55             int curr=1; //n
56             int firstNum = 0;//a
57             int SeondNum = 1;//b
58 
59             int tmp = 0;
60             while (curr < position)                
61             {
62                 Console.Write(string.Format("{0,5},",SeondNum));
63 
64                 tmp = firstNum;
65                 firstNum=SeondNum;
66                 SeondNum+=tmp;
67 
68                 curr++;
69             }
70             Console.Write(string.Format("{0,5},", SeondNum));
71 
72             Console.Write("\n");
73             return SeondNum;
74         }
75         #endregion
76 
77     }
78 }
示例代碼

 

運行效果:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM