简单的了解一下递归

简介: 在编程中,递归大家肯定都不陌生了吧,今天我们来总结总结有关于递归的东西。

前言

在编程中,递归大家肯定都不陌生了吧,今天我们来总结总结有关于递归的东西。

什么?! 你陌生, 去刷题去,完后你就熟了。

递归的定义

程序调用自身的编程技巧称为递归

递归长什么样子

提到举例子我们肯定第一个想到的就是阶乘。

n! = n (n-1) (n-2) ... 1(n>0)

5! = 5 4 3 2 1

阶乘是我们从小学数学就接触的东西,没想到它现在还陪伴着我们🙄

用代码实现一下:

function recursion(n) {
    if (n == 1) return n
    return n * recursion(n - 1)
}

console.log(recursion(5)) // 5 * 4 * 3 * 2 * 1 = 120

再举一个例子吧,也是我们初高中课本上的,著名的河内塔问题:

河内塔.png

这个问题也是用递归来解决的:

function hanoi( n, p1, p2, p3)
{
    if(1 == n)
        
        console.log('盘子从' + p1 + '移动到' + p3);
    else
    {
        hanoi(n-1, p1, p3, p2);
        console.log('盘子从' + p1 + '移动到' + p3);
        hanoi(n-1, p2, p1, p3);
    }
}
hanoi(3,'p1','p2','p3');

河内塔结果.png

总结一哈

既然要写递归,就要知道它具备什么条件,从上面的例子不难看出,递归是具有边界条件的,阶乘中的n==1和河内塔中的1==n都是边界条件,递归还具有两个部分,边界条件满足的时候进入返回过程,边界条件不满足的时候,再次进入递归过程。

那么它还具有什么特点呢?

  • 它必须有一个出口条件,也就是要有一处作为结束,变成非递归的样子处理。
  • 递归处理的子问题要同原问题一样,并且逐渐变得简单。

总结一下:我们写的递归要具有边界条件,和基于边界条件分别做出的两部分处理过程。

并且使用递归是要逐渐使得问题变得简单,最终用非递归的方法作为结尾哦。

最后

我觉得,递归是思考过后对于问题提出的一种解决方案。

在你提出用递归解决的时候,就已经知道他的边界条件是什么了,只需要写出递归的那部分,随后使用非递归的方式作为程序出口即可。

点个赞,一起学习进步吧♥
相关文章
|
IDE 开发工具 Python
解决pycharm运行项目时控制台乱码
解决pycharm运行项目时控制台乱码
229 0
|
人工智能 开发框架 物联网
为什么 C# 可能是最好的第一编程语言
C# 是一个全面领域的全能型语言,结合新时代的 .NET 平台,与时俱进的发展创新,未来无限可期!对于带着有色眼镜看待的人们,是否该刮目相看了呢?下面看看行业大佬关于 .NET 的解说。
1359 2
为什么 C# 可能是最好的第一编程语言
|
SQL Oracle 关系型数据库
若依框架---PageHelper分页(五)
若依框架---PageHelper分页(五)
399 0
|
6月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
269 0
|
8月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
366 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
前端开发
react中 useContext 和useReducer的使用
react中 useContext 和useReducer的使用
react中 useContext 和useReducer的使用
|
存储 NoSQL 安全
深入Linux Core文件生成与自定义命名规则
深入Linux Core文件生成与自定义命名规则
321 2
|
11月前
|
监控 关系型数据库 MySQL
MySQL 查看数据库实例
MySQL 查看数据库实例
260 6
|
前端开发 UED 开发者
神秘的 CSS 属性 “position: sticky” 究竟有何魔力?带你彻底理解粘性定位的奇妙世界!
【8月更文挑战第20天】在前端开发中,CSS的粘性定位(`position: sticky`)是一种结合了相对与固定定位优点的强大工具。它使元素能在特定条件下相对定位,达到指定阈值时转为固定定位,非常适合制作“吸顶”导航栏等。例如,设置`position: sticky; top: 0;`能让导航栏滚动至顶部时固定显示。此特性不仅限于导航栏,还可应用于侧边栏等,增强布局灵活性与用户体验。尽管如此,仍需注意不同浏览器间的兼容性和可能的布局冲突。
462 0