下面第一个结果,通过数组得到的,第二个是普通递归得到的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