递归

递归就是方法自己调用自己,


 既然是方法调用自己,那么一般用起来就会在它的内部进行循环,所以说一般情况下递归的效率是比较低的

递归的要点:

(1)递归操作的每两步都是有紧密的联系,如在“递归”的“归操作时”,前一次的输出就是后一次的输入。

(2)必须要有结束递归的条件。

(3)递归必须要有一个递归出口。

(4)大规模的问题不适合递归,因为需要进栈出栈比较频繁,效率比较低,还容易造成栈溢出。

 先看一下下面这个简单的程序:

   public static int index = 0;
        public static void M1()
        {
            Console.WriteLine("A");
            if (index < 3)
            {
                index++;
                M1();
            }
            Console.WriteLine("B");
        }           //程序输出结果是AAAA  BBBB

一开始以为应该输出AAAA B,因为程序执行了哪还有向回走的?

不过这里还真是的,开始index=0,输出第一个A,index++,   这时index=1 ,(输出B=?),。。。。。直到最后一次调用,index=3,if条件已经不满足了,这时已经输出了四个A,程序向后执行,输出第一个B,紧接着栈空间中弹出倒数第二个M1方法,输出第二个B,。。就这样输出第四个


然后呢,看下面这个:

 static void Main(string[] args)
        {
            M(0);   
            Console.ReadLine();
        }
        public static void M(int n)
        {
            Console.WriteLine(n);
            n++;
            if (n < 3)
            {
                M(n);
            }
            Console.WriteLine(n);
        }

 程序输出0 1 2 3 2 1

开始执行的时候,n=0,输出,比方说这时程序所在位置是A;继续执行,输出n=1,程序在B;。。。。C

当M(n)递归调用完毕后,程序向后执行输出3,这时在位置C,返回位置B,输出2,返回A,输出1

原文地址:https://www.cnblogs.com/tuibian/p/3359443.html