代码改变世界

递归

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


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

递归的要点:

(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,。。就这样输出第四个


 

然后呢,看下面这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

 

posted @   风一样的平凡  阅读(131)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多