下面第一個結果,通過數組得到的,第二個是普通遞歸得到的160+萬次,第三個是“新解法”(只針對這個問題),166萬次和29次,效率自己想。。。
公司面試出這道題,考得就是遞歸的運用,數組方法,大家知道就行,面試寫的時候還是得用遞歸

1 #region 數組方式實現 2 /// <summary> 3 /// 數組方式實現 4 /// </summary> 5 /// <param name="num"></param> 6 /// <returns></returns> 7 public static int ArrayMath(int num = 30) 8 { 9 if (num <= 2) 10 { 11 return 1; 12 } 13 else 14 { 15 int[] array = new int[num]; 16 array[0] = 1; 17 array[1] = 1; 18 for (var i = 2; i < num; i++) 19 { 20 array[i] = array[i - 1] + array[i - 2]; 21 } 22 return array[num - 1]; 23 } 24 } 25 #endregion

#region 常規遞歸方式實現 public static int DiGuiMath(int num = 30) { ++numberDiGuiMath; if (num <= 2) { return 1; } else { return DiGuiMath(num - 1) + DiGuiMath(num - 2); } } #endregion

#region 超快遞歸 public static int DiGuiMathFast(int num = 30,int head = 1, int end = 1) { ++numberDiGuiMathFast; if (num <= 2) { return end; } else { return DiGuiMathFast( num - 1,end, head + end); } } #endregion