数据结构之递归与栈
1.
代码实现:
/// <summary> /// 递归求阶乘 /// </summary> /// <param name="n"></param> /// <returns></returns> public static int Func(int n) { if (n == 1) { return 1; } else { return n * Func(n - 1); } }
递归与栈
栈:是限定仅在表尾进行插入或删除操作的线性表。
函数递归是利用系统中栈进行操作的,通过对栈帧的一系列操作,从而实现递归。这个过程是由系统来完成的。
看下图,比如n=4,第一次是将func(4)放入栈中,同理依次放入栈中,栈是先进后出,现在是func(1)函数在最上面,需要注意的是此时n=1,就会直接退出func方法,通过return会离开方法的方法体的范围,对于栈中的数据来说,离开了方法体的范围,对应的数据就会从栈中移除,所以func(1)函数移出,同时算出结果为1,同理依次移出,最终结果为:1*2*3*4=24。
其实普通函数和递归函数也是一样的,普通方法内部调用另一个方法,内部都是利用栈进行操作的。
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术