递归
递归就是方法自己调用自己,
既然是方法调用自己,那么一般用起来就会在它的内部进行循环,所以说一般情况下递归的效率是比较低的
递归的要点:
(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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)