南宁市住房和城乡建设局网站,电脑制作网页的软件,响应式网站要多久,seo是如何优化一、递归简介
递归算法是一种直接或者间接调用自身函数或者方法的算法。
递归算法的实质是把问题分解成规模缩小的同类问题的子问题#xff0c;然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效#xff0c;它可以使算法简洁和易于理解。
递归本质是循环然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效它可以使算法简洁和易于理解。
递归本质是循环循环推理。
递归是一种数学上分而自治的思想。
A、将原问题分解为规模较小的问题进行处理
分解后的问题与原问题类型完全相同但规模较小。
通过小规模问题的解能够轻易求得原生问题的解
B、问题的分解是有限的
当边界条件不能满足时分解问题继续递归
当边界条件满足时直接求解递归结束
二、递归在程序设计中的应用
递归函数
函数体中存在自我调用的函数
递归函数必须有递归出口边界条件
函数的无限递归将导致程序崩溃
使用递归函数时不要陷入递归函数的执行细节应首先建立递归模型和确立边界条件。
三、递归算法常见的应用场景
1.数据的定义是按递归定义的。如斐波那契数列 2.问题解法按递归算法实现。如递归求和 3.数据的结构形式是按递归定义的。如二叉树、广义表等
四、递归使用场景整理
1.树结构中使用递归
C#树结构操作逻辑整理
/// summary
/// 地区案例测试
/// /summary
static void TestArea()
{ListArea list new ListArea() {new Area(){ ID1,Name中国,ParentIDnull},new Area(){ ID2,Name山东,ParentID1},new Area(){ ID3,Name济南,ParentID2},new Area(){ ID4,Name槐荫,ParentID3},new Area(){ ID5,Name千乐微云,ParentID4},new Area(){ ID6,Name市中区,ParentID3},new Area(){ ID7,Name泉城广场,ParentID6},};//转化为树结构展示var result getChild(null, list);Console.WriteLine(result.ToJsonString());
}
/// summary
/// 递归处理子节点
/// /summary
static ListArea getChild(int? parentid, ListArea source)
{ListArea result new ListArea();//1.获取父节点ListArea parent source.Where(q q.ParentID parentid).ToList();if (parent.Count 0){//添加父类对象result.AddRange(parent);foreach (Area item in parent){//循环父节点获取子节点item.Children getChild(item.ID, source);}}return result;
} 2.递归求和 /// summary
/// 递归求和
/// /summary
static int Sum(int num)
{if (num 1)return 1;return num Sum(num - 1);
}//递归求和
Console.WriteLine(Sum(1));//1
Console.WriteLine(Sum(2));//3
Console.WriteLine(Sum(3));//6
Console.WriteLine(Sum(4));//10
3.递归计算阶乘 /// summary
/// 递归阶乘
/// /summary
static int Factorial(int num)
{if (num 1)return 1;return num * Factorial(num - 1);
}//递归阶乘
Console.WriteLine(Factorial(1));//1
Console.WriteLine(Factorial(2));//2
Console.WriteLine(Factorial(3));//6
Console.WriteLine(Factorial(4));//24 4.递归实现斐波那契数列
待完善.....
5.递归实现全排列
全排列算法(递归)封装
排列组合算法(递归)1 更多
C#树结构操作逻辑整理
初学者开发流程_项目开发常见问题
二维码简介_二维码基本概念_二维码基本原理