Chapter 7. 递归

一、概念 conception

函数体内调用本函数自身,直到符合某一条件不再继续调用。

二、应满足条件 factor

1、有反复执行的过程(调用自身);

2、有跳出反复执行过程的条件(函数出口);

三、例子 example

/// <summary>
/// 计算阶乘:n!=n*(n-1)*(n-2)*(n-3)*......*1(n>0)
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
     public int recursion(int i)
        {
            int sum = 0;
            if(i==1)
            {
                return i;
            }
            sum = i * recursion(i-1);
            return sum;
        }
        static void Main(string[] args)
        {
            Program digui = new Program();
            Console.WriteLine("5的阶乘:"+digui.recursion(5));
            Console.ReadLine();
        }

四、注意事项 notice

1、递归中必须要存在一个循环结束的条件

2、递归函数的每次调用都需要栈来存储,如果次数太多的话容易造成栈溢出。

五、练习

     /// <summary>
        /// 一群羊赶到各村去卖,每过一个村丢失之前总数的一半零一只,
        /// 过了7个村之后还剩2只,问最初赶出多少只羊
        /// </summary>
        /// <param name="village"></param>
        /// <returns></returns>
        public int Sheep (int village)
        {
            int sum = 0;
            if(village==7)
            {
                return 2;
            }
            sum = 2 * (Sheep(village+1)+1);
            return sum;
        }
        static void Main(string[] args)
        {
            Program hanshu = new Program();
            double x = hanshu.Sheep(0);
            Console.WriteLine("递归求羊:"+x);
            Console.ReadLine();
        }

posted @ 2016-05-16 15:54  庚xiao午  阅读(125)  评论(0编辑  收藏  举报