C#中递归算法的总结
递归是数学中一种重要的算法思想,在编程中也常常用到递归思想解决问题,运用递归,使代码显得更加简洁。现将总结的关于编程中使用递归的方法总结如下:
/// <summary> /// 一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现; /// </summary> /// <param name="n"></param> /// <returns></returns> static int Fibonacci(int n) { if (n <= 1) { return n; } else { return Fibonacci(n - 1) + Fibonacci(n - 2); } } /// <summary> /// 求两个数的最小公约数 /// </summary> /// <param name="m"></param> /// <param name="n"></param> /// <returns></returns> static int MinDivisor(int m, int n) { if (m % n == 0) return n; else return MinDivisor(n, m % n); } /// <summary> /// 求一个数组中的最大值 /// </summary> /// <param name="a"></param> /// <param name="n"></param> /// <returns></returns> static int FindMax(int[] a, int n) { if (a == null || n > a.Length || n < 1) { throw new ArgumentException(); } if (n == 1) { return a[0]; } int max = FindMax(a, n - 1); if (a[n - 1] > max) { max = a[n - 1]; } return max; } /// <summary> /// 求一个数组中的最大值(调用Max函数) /// </summary> /// <param name="a"></param> /// <param name="n"></param> /// <returns></returns> static int FindMax2(int[] a, int n) { if (a == null || n > a.Length || n < 1) throw new ArgumentException(); if (n == 1) return a[0]; return Math.Max(FindMax2(a, n - 1), a[n - 1]); }
客户端调用代码如下:
static void Main(string[] args) { //int number=Convert.ToInt32(Console.ReadLine()); //int result = Fibonacci(number); //Console.WriteLine(result); //Console.WriteLine(MinDivisor(12, 18)); int[] a = { 1, 210, 3, -51, 327, -58, 102300, 54343, -20, 0 }; int max = FindMax2(a, a.Length); Console.WriteLine(max); Console.ReadLine(); }
在编程中掌握递归的思想,往往会达到事半功倍的效果!