当前位置: 首页 > news >正文

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#树结构操作逻辑整理

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

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

相关文章:

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

一、递归简介 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归算法的实质是把问题分解成规模缩小的同类问题的子问题&#xff0c;然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效&#xff0c;它可以使算法简洁和易于理解。 递归本质是循环&a…...

[Python]unittest-单元测试

目录 unittest的大致构成: Test Fixture Test Case-测试用例 Test Suite-测试套件 Test Runner 批量执行脚本 makeSuite() TestLoader discover() 用例的执行顺序 忽略用例执行 skip skipIf skipUnless 断言 HTML测试报告 错误截图 unittest是python中的单元测…...

Jetpack:021-Jetpack中的滑动列表

文章目录 1. 概念介绍2. 使用方法2.1 函数参数2.2 列表成员 3. 示例代码4. 内容扩展5. 内容总结 我们在上一章回中介绍了Jetpack中底部导航栏相关的内容&#xff0c;本章回中主要介绍 滑动列表。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍…...

基于单片机的空气质量检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、主要内容二、系统方案设计2.1 系统方案设计2.2 主控制器模块选择 三、 系统软件设计4.1 程序结构分析4.2系统程序…...

论文阅读——InstructGPT

论文&#xff1a;Training_language_models_to_follow_instructions_with_human_feedback.pdf (openai.com) github&#xff1a;GitHub - openai/following-instructions-human-feedback 将语言模型做得更大并不能从本质上使它们更好地遵循用户的意图。例如&#xff0c;大型语…...

【表面缺陷检测】铝型材表面缺陷检测数据集介绍(含xml标签文件)

一、铝型材介绍 铝型材是一种由铝合金材料制成的&#xff0c;具有固定截面形状和尺寸的条形建材。由于其优良的物理性能和广泛的应用领域&#xff0c;铝型材在现代工业和生活中发挥着重要的作用。 1、铝型材的分类 根据截面形状的不同&#xff0c;铝型材可分为角铝、槽铝、工…...

我的学习:从本科到研究生的认识与实践经验总结

学习实践经历 18年 上大学以后&#xff0c;因为对计算机的喜爱和对未知编程技术的好奇和探索&#xff0c;选择了从零开始学习程序设计&#xff0c;经过实践&#xff0c;选择了转专业到计算机科学与技术&#xff0c;开始了我的计算机学习之路。 19年 因为想要拓宽自己的专业能力…...

云游长江大桥,3DCAT实时云渲染助力打造沉浸化数字文旅平台

南京长江大桥是中国第一座自主设计建造的双层公路铁路桥&#xff0c;也是世界上最早的双层公路铁路桥之一。它不仅是一座桥梁&#xff0c;更是一座历史文化的见证者和传承者。它见证了中国人民的智慧和奋斗&#xff0c;承载了中国社会的变迁和发展。 如何让这座不可移动的文物…...

【音视频|PCM】PCM格式详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

行为型模式-行为型模式

在模板模式中&#xff0c;一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 意图&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类…...

openpnp - Warning - Unknown firmware

文章目录 openpnp - Warning - Unknown firmware概述笔记https://github.com/openpnp/openpnp/wiki/Motion-Controller-Firmwares备注END openpnp - Warning - Unknown firmware 概述 接上飞达控制板后, 显示未知固件的警告 开始没看源码之前, 总以为是回答的版本号不合适, …...

Android 中如何使用 App Links

1. 简介 什么是 App Links呢&#xff1f;App Links 是 Android 6.0 (API 级别23) 引入的新功能&#xff0c;它是基于 DeepLinking&#xff0c;允许应用自动处理网站的 URL&#xff0c;而无需提示用户启动相应的应用。 例如&#xff1a;如果你在手机浏览器中输入了某个网站&am…...

7 款好用的 PDF 密码删除工具

这是最佳 PDF 密码删除工具列表。该列表包括免费和付费软件。将要在线完成的所有事情都需要密码才能感到安全。数据传输也是如此。大多数数据是通过文件传输的&#xff0c;PDF有自己的标志。PDF是一种灵活的文件格式&#xff0c;因此也可以专业使用。 有多种PDF 编辑器软件&am…...

你一般什么时候会用到GPT?

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种自然语言处理技术&#xff0c;它在各种领域和场景中都有广泛的应用。下面将详细介绍一些常见的情况&#xff0c;人们在这些情况下通常会使用GPT&#xff1a; 自然语言生成&#xff1a; GPT可以用于生成文本…...

YUV编码格式解析

YUV 颜色编码 YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色。 其中&#xff0c;Y 表示明亮度&#xff08;Luminance、Luma&#xff09;&#xff0c;而 U 和 V 表示色度&#xff08;Chrominance、Chroma&#xff09;。 而色度又定义了颜色的两个方面&#xff1a;色…...

mysql-面试50题-5

一、查询数据 ymysql-面试50题-2-CSDN博客 二、问题 41.按照出生日期来算&#xff0c;当前月日 < 出生年月的月日则&#xff0c;年龄减一 mysql> select student.SId as 学生编号,student.Sname as 学生姓名, -> TIMESTAMPDIFF(YEAR,student.Sage,CURDATE(…...

微服务初始和Nacos安装

一)初始微服务: 微服务是将一个大型的&#xff0c;单一的应用程序拆分成多个小型服务&#xff0c;每一个服务负责于特定的业务功能&#xff0c;并且可以通过网络来和其他服务进行通讯&#xff0c;是一个思想&#xff0c;将一个大的项目拆分成多个小的项目&#xff0c;多个小的项…...

YouTube博主数据信息资源

YouTube博主数据信息资源 &#x1f525;我是一位拥有10年编程经验的程序猿&#xff0c;为你带来一个全新的优质资源 &#x1f50d;您是否在寻找最新、最活跃的YouTube博主数据&#xff0c;以助力你的项目、营销或研究&#xff1f; 我们的数据&#xff0c;您的优势&#xff1a;…...

算法通过村第十七关-贪心|黄金笔记|跳跃游戏

文章目录 前言跳跃游戏最短跳跃游戏总结 前言 提示&#xff1a;曾走过山&#xff0c;走过水&#xff0c;其实只是借助他们走过我的生命&#xff1b;我看着天&#xff0c;看着地&#xff0c;其实只是借助它们确定我的位置&#xff1b;我爱这她&#xff0c;爱着你&#xff0c;其实…...

【精选】VMware部署ESXI6.5 vCenter Server详解

VMware部署ESXI6.5 vCenter Server 一、ESXi主机介绍1、虚拟机的好处2、为什么要使用虚拟机 二、虚拟化服务器概述1、VSphere物理架构2、体系架构3、VMware vSphere 组件 三、ESXi安装环境1、安装步骤2、使用VMware新建ESXi主机3、初始环境安装 四、创建虚拟机五、安装部署VMwa…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...