• 递归


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


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

    递归的要点:

    (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

  • 相关阅读:
    hdu5119 DP
    poj3692 最大点权独立集/最大独立集
    poj2125 最小点权覆盖集
    二分图总结
    poj2531 Network Saboteur
    poj1573 Robot Motion
    poj2632 Crashing Robots
    poj1068
    动态规划的思考(三)
    代刷题目分类(三)
  • 原文地址:https://www.cnblogs.com/tuibian/p/3359443.html
Copyright © 2020-2023  润新知