C# 递归算法使用简介_常用整理

一、递归简介

递归算法是一种直接或者间接调用自身函数或者方法的算法。

递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。

递归本质是循环,循环推理。

递归是一种数学上分而自治的思想。

A、将原问题分解为规模较小的问题进行处理

分解后的问题与原问题类型完全相同,但规模较小。

通过小规模问题的解,能够轻易求得原生问题的解

B、问题的分解是有限的

当边界条件不能满足时,分解问题(继续递归)

当边界条件满足时,直接求解(递归结束)

二、递归在程序设计中的应用

递归函数:

函数体中存在自我调用的函数

递归函数必须有递归出口(边界条件)

函数的无限递归将导致程序崩溃

使用递归函数时不要陷入递归函数的执行细节,应首先建立递归模型和确立边界条件。

三、递归算法常见的应用场景

1.数据的定义是按递归定义的。如:斐波那契数列
2.问题解法按递归算法实现。如:递归求和
3.数据的结构形式是按递归定义的。如二叉树、广义表等

四、递归使用场景整理

1.树结构中使用递归

C#树结构操作逻辑整理

/// <summary>
/// 地区案例测试
/// </summary>
static void TestArea()
{List<Area> list = new List<Area>() {new Area(){ ID=1,Name="中国",ParentID=null},new Area(){ ID=2,Name="山东",ParentID=1},new Area(){ ID=3,Name="济南",ParentID=2},new Area(){ ID=4,Name="槐荫",ParentID=3},new Area(){ ID=5,Name="千乐微云",ParentID=4},new Area(){ ID=6,Name="市中区",ParentID=3},new Area(){ ID=7,Name="泉城广场",ParentID=6},};//转化为树结构展示var result = getChild(null, list);Console.WriteLine(result.ToJsonString());
}
/// <summary>
/// 递归处理子节点
/// </summary>
static List<Area> getChild(int? parentid, List<Area> source)
{List<Area> result = new List<Area>();//1.获取父节点List<Area> 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#树结构操作逻辑整理

初学者开发流程_项目开发常见问题

二维码简介_二维码基本概念_二维码基本原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/172710.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】SourceForge 开源软件开发平台和仓库

在linux上面安装服务和工具。我们经常会下载安装包。今天推荐一个网站。 SourceForge 开源软件开发平台和仓库 ​ 全球最大开源软件开发平台和仓库 SourceForge.net&#xff0c;又称SF.net&#xff0c;是开源软件开发者进行开发管理的集中式场所。 SourceForge.net由VA Softwa…

如何使用ffmpeg制作透明背景的视频

最近我们尝试在网页上叠加数字人讲解的功能&#xff0c;发现如果直接在网页上放一个矩形的数字人视频&#xff0c;效果会很差&#xff0c;首先是会遮挡很多画面的内容&#xff0c;其次就是不管使用任何任务背景&#xff0c;画面都和后面的网页不是很协调&#xff0c;如图所示&a…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(下)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart吉祥物Dash 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/arti…

【JavaEE】HTTP协议

HTTP协议 HTTP是什么?HTTP 协议格式HTTP 请求格式HTTP响应格式协议格式总结 HTTP 请求 (Request)认识 URLURL 基本格式 关于 URL encode认识 "方法" (method)1. GET 方法2. POST 方法 认识请求 "报头" (header) HTTP 响应详解认识 "状态码" (st…

Azure - 机器学习:创建机器学习所需资源,配置工作区

目录 一、Azure机器学习工作区与计算实例简要介绍工作区计算实例 二、创建工作区1. 登录到 Azure 机器学习工作室2. 选择“创建工作区”3. 提供以下信息来配置新工作区&#xff1a;4. 选择“创建”以创建工作区 三、创建计算实例四、工作室实战4.1 工作室快速导览4.2 从示例笔记…

「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(二)

本教程中介绍一些基于JPA/ spring的特性&#xff0c;重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何&#xff1a; 为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务 在上文中&#xff08;点击这里回顾>…

Flink将数据写入MySQL(JDBC)

一、写在前面 在实际的生产环境中&#xff0c;我们经常会把Flink处理的数据写入MySQL、Doris等数据库中&#xff0c;下面以MySQL为例&#xff0c;使用JDBC的方式将Flink的数据实时数据写入MySQL。 二、代码示例 2.1 版本说明 <flink.version>1.14.6</flink.version…

DBSCAN算法c++实现

首先计算出距离每个点e以内的点&#xff0c;如果个数>minPts,则找出它的直接密度可达和间接可达的点&#xff0c;用visited标记点是否已经在簇中&#xff0c;循环直到最后一个点。 #include <fstream> #include <vector> #include <iostream> #include &…

广州华锐互动:VR技术应用到工程项目施工安全培训的好处

随着科技的飞速发展&#xff0c;虚拟现实(VR)技术已经深入到各个领域。在建筑施工领域&#xff0c;VR技术的应用为工程项目施工安全培训带来了许多好处。本文将探讨VR技术在这方面的优势和应用。 首先&#xff0c;VR技术能够提供沉浸式的安全培训体验。通过VR设备&#xff0c;学…

x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论

代码参考https://github.com/colourfate/x210_bsp/ 他的是linux_4.10(dtb为 s5pv210-x210..dtb)我打算用linux4.19.114(dtb为 s5pv210-smdkv210.dtb) &#xff0c;所以修改build.sh ------------------------------------------------------------------------------ 5 M…

【开源】基于SpringBoot的高校学院网站的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学院院系模块2.2 竞赛报名模块2.3 教育教学模块2.4 招生就业模块2.5 实时信息模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学院院系表3.2.2 竞赛报名表3.2.3 教育教学表3.2.4 招生就业表3.2.5 实时信息表 四、系…

python之计算平面点集的的面积

在当今数据驱动的世界中&#xff0c;计算平面点集的最小外接轮廓面积被广泛应用于各种实际场景中。它是一项重要而魅力十足的任务&#xff0c;旨在找到一个最小的矩形或多边形区域&#xff0c;能够完全包围给定的离散点集。这个看似简单的问题背后隐藏着许多挑战&#xff0c;需…

python爬虫之feapder.AirSpider轻量爬虫案例:豆瓣

创建feaderSpider项目&#xff1a;feapder create -p feapderSpider&#xff0c;已创建可忽略进入feapderSpider目录&#xff1a;cd .\ feapderSpider\spiders创建爬虫&#xff1a;feapder create -s airSpiderDouban&#xff0c;选择AirSpider爬虫模板&#xff0c;可跳过1、2直…

KMS在腾讯云的微服务实践助力其降本50%

背景介绍 KMS 是一家日本的游戏公司&#xff0c;主要经营游戏业务、数字漫画业务、广告业务、云解决方案业务等&#xff0c;出品了多款在日本畅销的漫画风游戏&#xff0c;同时有网络漫画专业厂牌&#xff0c;以内容创作为目标&#xff0c;拥有原创 IP 创作、游戏开发等多元化发…

bitlocker 加密锁定的固态硬盘,更换到别的电脑上,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥

环境: Win11 专业版 联想E14笔记本 512G ssd 问题描述: 一台笔记本因充电故障,需要拿去维修,不想重装系统,将bitlocker 加密锁定的固态硬盘拆下更换到别的笔记本电脑上,现在开机要手动填密钥,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥和之前那台电脑一…

DevOps与CI/CD的最佳实践

在当今的软件开发领域&#xff0c;DevOps&#xff08;开发与运维的结合&#xff09;和CI/CD&#xff08;持续集成/持续交付&#xff09;已经成为了不可或缺的一部分。它们不仅提高了软件开发的效率&#xff0c;还帮助团队更快地交付高质量的软件。本文将深入探讨DevOps文化和CI…

iOS Xcode15 适配:Other Linker Flags:-ld_classic

0x00 适配是一条没有尽头的路 Xcode 14 毛问题都没有&#xff0c;Xcode 15 崩溃 看图说话 0x01 解决方案 Other Linker Flags 添加 -ld_classic 即可 0x02 我的小作品 欢迎体验我的作品之一&#xff1a;小挑战-XGame 拼图游戏&#xff0c;渐变色游戏&#xff0c;经典24点游…

List 3.5 详解原码、反码、补码

前言 欢迎来到我的博客&#xff0c;我是雨空集&#xff08;全网同名&#xff09;&#xff0c;无论你是无意中发现我&#xff0c;还是有意搜索而来&#xff0c;我都感到荣幸。这里是一个分享知识、交流想法的平台&#xff0c;我希望我的博客能给你带来帮助和启发。如果你喜欢我…

Ubuntu ARMv8编译Qt源码以及QtCreator

最近需要在NVIDIA小盒子上面跑一个程序&#xff0c;一开始想着在Ubuntu x64下交叉编译一版&#xff0c;后来发现libqxcb.so 这个库在configure时就会一直报错&#xff0c;多方查找怀疑可能是由于硬件不支持在x64环境下编译AMR架构的xcb库。 所以最后在ARM下直接编译Qt源码了&am…

word页脚设置,页脚显示第几页共有几页设置步骤

word页脚设置&#xff0c;页脚显示第几页共有几页设置步骤&#xff1a; 具体步骤&#xff1a; 步骤1&#xff1a; 步骤1.1选择页脚---空白页脚 步骤1.2&#xff0c;在"[在此处键入]"&#xff0c;直接输入你需要的格式&#xff0c;如 “第页/共页” 步骤1.3选择第“…