C# 递归与非递归算法与数学公式
1、递归
递归:程序调用自身的编程技巧称为递归(recursion)。
优点是:代码简洁,易于理解。
缺点是:运行效率较低。
递归思想:把问题分解成规模更小,但和原问题有着相同解法的问题。
1)下面是关于1+2+3+....+n的递归算法:
/// <summary> /// 1+2+3+....+n的递归算法 /// </summary> /// <param name="i"></param> /// <returns></returns> public static int Process1(int i) { //计算1+2+3+4+...+100的值 if (i == 0) return 0; return Process1(i - 1) + i; }
当i=3的时候,我觉得运算过程可能是这样的(个人理解):
Process2(3- 1) + 3 =
Process2(2 - 1) + 2 + 3 =
Process2(1 - 1) + 1 + 2 + 3 =
最后结果:0 + 1 + 2 + 3 = 6
2)假设有50瓶饮料,喝完3个空瓶可以换一瓶,以此类推,请问总共喝了多少瓶饮料?
public static int Process1(int i,int num) { if (i / num == 0) return 0; return Process1(i / num + i % num, num) + i; }
其中 i=50,num=3。结果为:74瓶。
2、非递归
下面是用循环形式非递归代替上面的递归算法:
/// <summary> /// 1+2+3+....+n的非递归算法 /// </summary> /// <param name="isum"></param> /// <returns></returns> public static int Process2(int isum) { int sum = 0; for (int i = 1; i <= isum; i++) { sum += i; } return sum; }
3、公式
后来与同学讨论,发现了更简便的。
public static int Process3(int i) { //计算1+2+3+4+...+100的值 return i * (i + 1) / 2; }
数学果然很厉害,用了一个公式,既简便又效率。
4、其他递归例子
(1) 斐波那契数列
/// <summary> /// 斐波那契数列递归算法,用于计算第i位的值 /// </summary> /// <param name="i"></param> /// <returns></returns> public static int Process(int i) {
//计算1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233.....第i列的值 if (i == 0) return 1; if (i == 1) return 1; return Process(i - 2) + Process(i - 1); }
(2)n的阶乘
/// <summary> /// 1*2*3*....*n的递归算法 /// </summary> /// <param name="i"></param> /// <returns></returns> public static int Process(int i) { //计算1*2*3*...*n的值 if (i == 0) return 0; return Process(i - 1) * i; }
5、最后
下面分享个递归的实际例子(压缩时,查找某个文件夹里所有的文件):C# 压缩文件 ICSharpCode.SharpZipLib.dll
相关文章:C# 冒泡排序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?