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

初识递归算法

目录

  • 介绍
    • Python
    • C++
  • 原理
  • 优缺点分析
  • 题目
  • 结尾

本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser

介绍

递归是一种算法,即自己调用自己。可以是一个函​数自己调用自己,即直接递归,也可以是两个函​数相互调用,即间接递归。

递归​算法主要由两个部分组成:递归操作及递归边​界。递归操作是函​数的主体部分,负责执行运算、实现功能;递归边​界即一个条件, 满足条件后停止递归,并返回上一层,以避免程​序无​限递归下去而陷入死循环。

比如,计算阶​乘就可以使用递归​算法来实现。n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 2 × 1 n!=n\times(n-1)\times(n-2)\times\cdots\times2\times1n!=n×(n1)×(n2)××2×1例如,5 ! = 5 × 4 × 3 × 2 × 1 = 120 5!=5\times4\times3\times2\times1=1205!=5×4×3×2×1=120
假设x xx的阶​乘用f ( x ) f(x)f(x)来表示x ∈ Z + x\in\mathbb{Z_+}xZ+,那么:

f ( x ) = { 1 ( x = 1 ) x × f ( x − 1 ) ( x > 1 ) f(x)=\left\{ \begin{aligned} &1\space(x=1) \\ &x\times f(x-1)\space(x>1) \\ \end{aligned} \right.f(x)={1(x=1)x×f(x1)(x>1)

翻译为代​码如下。

Python

deff(x):ifx>1:returnx*f(x-1)return1

C++

longlongintf(x){if(x>1){returnx*f(x-1);}return1;}

原理

可以发现,当调用f ( 5 ) f(5)f(5)时,程​序就会递归调用f ( 4 ) f(4)f(4),并计算5 × f ( 4 ) 5\times f(4)5×f(4),然后再计算4 × f ( 3 ) 4\times f(3)4×f(3)…直到调用f ( 1 ) f(1)f(1)才终于撞到了边​界条件,停止递归并返回1 11,接着f ( 2 ) f(2)f(2)返回2 22,f(3)返回6…直到f ( 5 ) f(5)f(5)返回120 120120
递归本质上是一种由系统自动维护的栈,数据先进后出(FILO,First in Last out)。
可见,第一个进去的f ( 3 ) f(3)f(3)最后一个出来,而最后进去的f ( 1 ) f(1)f(1)第一个出来。

优缺点分析

递归的写法有许多好处。首先,递归的代​码简洁,可以用较少的代​码表达较复杂的过程。其次,递归的效率还很高。

但递归不是万能的。能写成递归形式的算法,基本都可以写成非递归。且一个算法是否该用递归,还需要考虑数据规模。如果数据规模太过巨大,可能会导致递归几百万层,最终爆栈。

不过话说回来,递归最深深度也取决于硬件、操作系统、编程语言等因素,一般来说递归个几万层没多大问题。

递归还有一个小缺点:代​码太过简洁,可能难以理解,对初学者来说可能不太友好。

题目

有的题目用到了递归​算法:
洛谷 P1087 [NOIP2004 普及组] FBI 树
洛谷 P1010 [NOIP1998 普及组] 幂次方

结尾

好啦,今天的分享到此结束,记得点赞+收藏哦!

http://www.jsqmd.com/news/881286/

相关文章:

  • 亚太赫兹ISAC技术:机器联觉与多模态融合的6G通信
  • 基于神经网络的短码长ISAC双功能信号联合优化设计
  • 华硕天选一代无线网卡断网
  • Windows Server 2019真实渗透实战:从WebShell到域控的完整红队链路
  • 机器学习预测暗物质晕形成时间:随机森林与CNN在天体物理中的应用
  • Go-File安全加固手册:防止未授权访问的8个关键配置
  • UE5 GAS实战:用一张曲线表格(Curve Table)搞定RPG游戏中的等级成长与回复效果
  • 小型本地LLM框架在教育领域的应用与实现
  • Java NIO 1.0 架构基石:SelectorProvider 源码深度剖析与 SPI 工厂模式
  • 开源社区贡献者画像分析:核心与外围贡献者的行为差异与影响
  • Elastic stack 技术栈学习(七)—— kibana中索引的基本操作(创建、删除、更新、查看)以及文档的基本操作
  • vue-axios-github实战:从零开始掌握前端登录拦截与路由守卫核心技术
  • 2024火狐Burp证书配置失效原因与NSS信任链修复指南
  • 【表达式】JAVA解析数学表达式 parsii 计算数学公式 表达式规则引擎 动态脚本语言
  • 鬼泣5附历代合集(内附绅士mod)2026最新官方正版免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
  • FCEUX终极指南:如何用NES模拟器重温经典并深入调试
  • ARM SME架构下BFloat16矩阵运算优化实践
  • Unity 2022+ 接入Tap广告联盟SDK避坑指南:从Gradle配置到实机测试全流程
  • 电子信息工程专业打工人的蓝桥杯嵌入式竞赛时记
  • 从安装到精通:BetterTweetDeck完整使用手册(2023最新版)
  • 网盘下载加速神器LinkSwift:告别龟速下载的5分钟完整指南
  • vczh_toys Linq库进阶:复杂数据处理的8个实用案例指南
  • 别再等电池报废!用Python+Sklearn,仅需100次循环数据就能预测电池寿命(附完整代码)
  • ComfyUI终极UI增强指南:7个免费工具让你的AI绘画效率翻倍
  • 可视化数据集构建指南:从概念到实践,驱动图表智能生成与理解
  • gcvis高级功能:自定义图表、数据导出与API集成终极指南
  • wolkenkit数据存储配置:PostgreSQL、MySQL、MongoDB实战指南
  • Unity 2022 LTS + Photon Fusion 2:手把手教你搭建第一个多人联机Demo(含完整代码)
  • 时间序列预测实战:从LightGBM到GNN与强化学习的算法选型指南
  • 海尔智能家居设备接入HomeAssistant:打造一体化智能家居控制中心