【数据结构与算法】深入浅出递归和迭代的通用转换思想

2023-10-26

深入浅出递归和迭代的通用转换思想

一般来说,能用迭代的地方就不要用递归!理论上讲,所有的递归和迭代之间都能相互转换!

刷题碰到【一天一道LeetCode】#130. Surrounded Regions所以来总结一下递归和迭代。

(一)何为迭代?

首先我们来看下面这段简单的代码:

int sum(int n )
{
    int sum =0;
    for(int i = 1 ; i <= n;i++) sum+=n;//求解1~n的和
    return sum;
}

从上述例子中,从1一直加到n,每一次的和都是在上一次的和上加上n,因此,我们不难理解,所谓迭代法(辗转法),就是一种不断用变量的旧值递推新值的过程。

迭代三大步骤:

  1. 确定迭代变量:确定一个直接或间接地不断由旧值推断新值的变量,如sum
  2. 建立迭代关系式:从变量的旧值推断到新值的公式,如f(n) = f(n-1)+n
  3. 对迭代过程进行控制:迭代不可能无限循环下去,需要对何时退出迭代进行控制!如i>n推出循环

(二)何为递归?

<
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构与算法】深入浅出递归和迭代的通用转换思想 的相关文章

随机推荐

  • Squid代理的用户认证(基本认证、集成Windows域认证)

    Squid代理的用户认证 基本认证 集成Windows域认证 2012 07 02 TsengYia 126 com 关于Squid代理服务的用户验证 本文简要介绍了两种方法的实现 basic基本认证 ntlm域认证 basic认证采用账户
  • springboot读取resources目录下文件

    文章目录 前言 1 问题过程 2 解决方案 2 1 文件上传 2 2 ClassPathResource 总结 前言 最近的工作中遇到了复杂的excel报表导出业务 采用的是用excel模板来实现该业务 可以规避大量勾画excel格式的代码
  • 静态测试及评审、测试用例

    7 1静态测试的定义 特点 静态测试通常是指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程 其被测对象是各种与软件相关的有必要进行测试的产物 例如各类文档 源代码等 特点 1 不必动态地运行程序 2 可以人工进行 充分发挥人的
  • 8分钟丨教你玩转 API

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由织云平台团队发表于云 社区专栏 背景 当下 业界越来越多公司在项目架构设计时 会采用微服务架构 微服务架构 可以让我们的产品有更好的扩展性 更好的伸缩性 但同时也会带来微服务的
  • Gerber文件的输出

    Step 01 首先打开PCB文件 Step 02 文件 制造输出 Gerber Files Step 03 通用设置 Step 04 层设置 如果有Keep out layter层勾选了 把他去掉 Step 05 钻孔图层设置 勾选钻孔图
  • MIPI-DSI协议解析——DCS命令集

    MIPI协议族 定义了一个专门用于显示的命令集 叫做Display Command Set 简称为DCS 这个DCS起什么作用呢 主要是Host和Display之间的一些Command配置和数据传输 以及读Display的数据等 使用过SP
  • 每日一练(代写匿名信-查找字符串)

    问题描述 小Q想要匿名举报XX领导不务正业 小Q害怕别人认出他的字迹 他选择从报纸上剪裁下来英文字母组成自己的举报信 现在小Q找来了报纸 和自己的举报信的Txt 小Q有急事 小Q跑去上厕所了 小Q让你帮他完成 小Q为什么这么坑 工作之前你当
  • 实现字符计数功能

    方法二 使用collections模块 使用Python内置的collections模块 其中Counter类可以快速实现字符计数功能 python from collections import Counter def char coun
  • 区块链主流币数据 API数据接口

    主流币数据 计费模式 免费额度 点数单价 每日限制 会员免费 100次 免费 10000次 更新时间 2022 07 11 02 48 03接口状态 正常 返回区块链主流币的价格等信息 请求地址 HTTPGET POST https www
  • stm32之ADC oled显示

    六路adc的显示结果 一些基本的代码 初始化ADC 初始化ADC void Adc Init void GPIO InitTypeDef GPIO InitStructure ADC CommonInitTypeDef ADC Common
  • 华为OD机试 - 数组二叉树(Java)

    题目描述 二叉树也可以用数组来存储 给定一个数组 树的根节点的值存储在下标1 对于存储在下标N的节点 它的左子节点和右子节点分别存储在下标2 N和2 N 1 并且我们用值 1代表一个节点为空 给定一个数组存储的二叉树 试求从根节点到最小的叶
  • 一行代码可以做些什么?

    点击蓝字 关注我们 众所周知 Python 是目前流行和易学的编程语言 2021 年 Python 获得了 TIOBE 编程指数的年度最受欢迎的编程语言 此外 它也连续蝉联了多个月的榜首 更值得一提的是 一些繁琐的任务 往往都可以用 Pyt
  • hadoop中的两个datanode节点的VERSION文件冲突,导致其中有一个datanode无法启动

    问题 分析 本来是有三个datanode才对 所以有一个datanode丢失 查看丢失的datanode的log日志 第一个报错 是datanode无法启动的报错日志 第二个报错 是因为datanode丢失 数据无法上传的报错 很奇怪的是
  • 2020年前端开发工具大全:50款热门的前端工具汇总

    今天跟大家分享一些目前比较热门新鲜度靠前的50款前端工具 希望对你有所帮助 下面和千锋广州小编一起来看看吧 一 构建工具 1 Parcel 地址 https parceljs org Parcel是一款极速零配置WEB应用打包工具 快速 几
  • Linux 根文件系统的挂载分析

    在介绍根文件系统挂载之前先介绍一些基础知识 initramfs 当linux内核启动后 会找到并执行第一个用户程序 一般是init 这个程序存在于文件系统当中 文件系统存在于设备上 但不知道init存在哪个设备上 于是有了内核命令列选项ro
  • 在Windows 10上安装WSL2

    TOC WSL2 在Windows10上安装 前提条件 是否支持Virtualization WSL2 是基于hyper V的 所以windows 机器必须支持虚拟化 如果是虚机的那就要支持嵌套的虚拟化 网上一堆看BIOS的太麻烦了 简单的
  • 【ffmpeg教程】【无损快速转换】两行代码 快速无损转换mkv flv视频文件 第一期

    ffmpeg教程 无损快速转换 两行代码 快速无损转换mkv flv视频文件 第一期 前言 环境准备 脚本编写 运行脚本 前言 视频版教程 无损快速转换 两行代码 快速无损转换mkv flv视频文件 导入Premiere教程 环境准备 工具
  • C#中得到两个数百分比 (转)

    此方法得到的百分比后小数太多 不行 double percent Convert ToDouble 2 Convert ToDouble 34 string result percent 100 ToString 得到的是5 8823529
  • 如何处理VS联合Qt没有ui_.h文件

    首先声明我使用的是VS2019 QT5 9 0 在初学VS联合QT时 发现自己VS中的资源管理器中没有ui h文件 在网上搜寻了一些解决方案 得出的大致结论就是 现在版本的VS中已经不会自动生成GeneratedFiles文件夹 那么其中的
  • 【数据结构与算法】深入浅出递归和迭代的通用转换思想

    深入浅出递归和迭代的通用转换思想 一般来说 能用迭代的地方就不要用递归 理论上讲 所有的递归和迭代之间都能相互转换 刷题碰到 一天一道LeetCode 130 Surrounded Regions所以来总结一下递归和迭代 一 何为迭代 首先