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();

           
        }

在编程中掌握递归的思想,往往会达到事半功倍的效果!

 

posted @ 2013-12-01 15:05  狼者为王  阅读(532)  评论(0编辑  收藏  举报