河池市网站建设_网站建设公司_虚拟主机_seo优化
2025/12/26 18:15:53 网站建设 项目流程

递归是一种通过函数调用自身来解决问题的编程方法,其核心是将复杂问题分解为更简单的子问题,直到可以直接求解。递归必须满足两个条件:终止条件和递推关系。常见应用包括斐波那契数列、阶乘计算和文件目录遍历。实现时需要注意调用栈深度,避免栈溢出。斐波那契数列示例展示如何通过前两项之和计算当前项,阶乘示例演示如何逐步分解乘法运算,而目录遍历则展示了递归处理嵌套结构的能力。递归代码简洁但需谨慎设计终止条件。

核心思路:

函数或者方法调用自己进行解决问题,核心思想就是复杂的问题分解为更为简单子问题,直到子问题简答到能够直接求解(循环结束的条件)

递归的两个必备条件:必须有终止条件(出口)和递推关系(拆分子问题);

执行基础:依赖调用栈,栈深度过大会导致溢出

栈深度:就是程序调用栈中当前存在的栈帧数量—— 每调用一次函数(包括递归调用),就会在栈中新增一个 “帧”(存储函数的参数、局部变量、返回地址),栈帧的数量就是栈深度。

案例:斐波那契数列、阶乘 、打印文件所有子目录和文件

斐波那契数列规律是 “从第三项开始,每一项等于前两项之和”4

如: n1 = 0 n2 = 1 n3=1 n4=2 n5=3 n6 =5 n7=8

代码参考:

//斐波那契数列 static int Recursion(int n) { if (n == 0) { return 0; } if (n == 1) { return 1; } return ArrFB(n - 2) + ArrFB(n - 1); }
Console.WriteLine(Recursion(5));

2. 计算阶乘 10!=10*9*8....1=10*9!=10*9*8!...=10*9*8....1!
代码参考

static int Recursion2(int n) { if (n == 0) { return 0; } if (n == 1) { return 1; } return n * Recursion2(n - 1); }

3.打印文件所有子目录和文件

代码参考:

static void Recursion3(string path, int count = 0) //int count 缩进的个数,默认值是0 { if (!Directory.Exists(path))//当路径不存在 直接 return { return; } string indent= new string(' ', count);//count 个空字符 //先遍历当前文件下的文件,文件不能再次遍历 例如 1.txt foreach (string file in Directory.GetFiles(path)) { //Path.GetFileName() 获取路径文件名字 Console.WriteLine($"{indent}文件:{Path.GetFileName(file)} "); } //遍历文件夹 foreach (string dir in Directory.GetDirectories(path)) { Console.WriteLine($"文件夹:{Path.GetFileName(dir)}"); //如果是文件夹需要再次遍历这个子文件夹 Recursion3(dir, count + 2); } }
//调用方法 Recursion3(@"../../"); // ../表示当前目录的上级目录 ../../ 上两级目录

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询