斐波拉契數列:
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
示例代碼:

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 }
運行效果: