java从入门到起飞(八)——循环和递归

文章目录

  • Java循环
    • 1. 什么是循环?
      • 1.1 为什么需要循环?
      • 1.2 循环的分类
    • 2. Java中的循环结构
      • 2.1 for循环
      • 2.2 while循环
      • 2.3 do-while循环
    • 3. 循环控制语句
      • 3.1 break语句
      • 3.2 continue语句
    • 4. 总结
  • Java递归
    • 1. 什么是递归
    • 2. 递归的原理
    • 3. 递归的实现
    • 4. 递归的应用
    • 5. 总结

Java循环

1. 什么是循环?

循环是一种重复执行特定代码块的结构。在编程中,我们经常需要重复执行某些任务,这时循环就派上了用场。

1.1 为什么需要循环?

循环使得程序可以自动化地执行重复的任务,而不需要手动重复编写相同的代码。它能够提高代码的可读性、简化程序的逻辑,并且方便对大量数据进行处理。

1.2 循环的分类

常见的循环类型包括:

  • 前测试循环:在执行循环体之前对循环条件进行判断,例如C语言中的for循环。
  • 后测试循环:在执行循环体之后对循环条件进行判断,例如Java中的while循环和do-while循环。
  • 无限循环:条件始终为真,例如在服务器程序中等待客户端连接的情况。

2. Java中的循环结构

在Java中,有三种主要的循环结构:for循环、while循环和do-while循环。它们分别适用于不同的应用场景。

2.1 for循环

for循环是一种前测试循环结构,它通常用于已知循环次数的情况。for循环由三部分组成:初始化、循环条件和循环迭代。

for (初始化; 循环条件; 循环迭代) {// 执行的代码块
}

例如,我们可以通过for循环输出数字1到10:

for (int i = 1; i <= 10; i++) {System.out.println(i);
}

2.2 while循环

while循环是一种前测试循环结构,它适用于未知循环次数但满足条件的情况。在执行循环体之前,先判断循环条件是否为真,如果为真则执行循环体。

while (循环条件) {// 执行的代码块
}

例如,我们可以通过while循环输出数字1到10:

int i = 1;
while (i <= 10) {System.out.println(i);i++;
}

2.3 do-while循环

do-while循环是一种后测试循环结构,它在执行循环体之后才判断循环条件。即使循环条件不满足,至少会执行一次循环体。

do {// 执行的代码块
} while (循环条件);

例如,我们可以通过do-while循环输出数字1到10:

int i = 1;
do {System.out.println(i);i++;
} while (i <= 10);

3. 循环控制语句

在循环中,还有一些特殊的语句用于控制循环的执行流程。

3.1 break语句

break语句用于提前结束循环,即使循环条件尚未满足。它可以用于任何循环结构(for循环、while循环和do-while循环)。

for (int i = 1; i <= 10; i++) {if (i == 5) {break;}System.out.println(i);
}

上面的示例中,当i等于5时,break语句会立即终止循环。

3.2 continue语句

continue语句用于跳过当前循环的剩余代码,继续下一次循环的执行。它也可以用于任何循环结构。

for (int i = 1; i <= 10; i++) {if (i % 2 == 0) {continue;}System.out.println(i);
}

上面的示例中,当i是偶数时,continue语句会跳过输出语句,直接进行下一次循环。

4. 总结

Java提供了for循环、while循环和do-while循环这三种主要的循环结构,用于重复执行特定的代码块。通过合理使用循环结构和循环控制语句,可以轻松处理重复性任务和大量数据的处理。

在使用循环时,需要注意循环条件的设置和循环体内的代码逻辑,以避免出现无限循环或错误的运算结果。同时,要根据具体的需求选择合适的循环结构,提高代码的可读性和可维护性。

希望本文对你理解和应用Java循环提供了一些帮助。​

Java递归

1. 什么是递归

递归是一种在函数内部调用自身的编程技巧。在Java中,递归是一种常见的算法和编程方法,用于解决需要重复执行相同操作的问题。

2. 递归的原理

递归的原理可以简单描述为以下几个步骤:

  1. 定义基本情况:确定递归终止的条件,即递归函数不再调用自身的情况。
  2. 定义递归规则:将问题划分为更小的子问题,并通过调用自身来解决子问题。
  3. 调用递归函数:在函数内部调用自身,将问题规模不断缩小,直到达到基本情况。
  4. 返回结果:将子问题的结果合并,得到最终的解。

3. 递归的实现

在Java中,实现递归通常需要定义一个递归函数。递归函数需要满足以下几个条件:

  • 基本情况:递归函数必须有一个或多个基本情况,当满足基本情况时,递归函数不再调用自身,直接返回结果。
  • 递归调用:递归函数内部需要调用自身,将问题划分为更小的子问题。
  • 问题规模减小:每次递归调用时,问题规模都应该比上一次调用时小,以确保递归能够终止。
    下面是一个简单的例子,用于计算一个正整数的阶乘:
public class RecursionExample {public static int factorial(int n) {// 基本情况:n为0或1时,直接返回1if (n == 0 || n == 1) {return 1;}// 递归调用:将问题规模缩小,计算n-1的阶乘return n * factorial(n - 1);}public static void main(String[] args) {int result = factorial(5);System.out.println("5的阶乘为:" + result);}
}

4. 递归的应用

递归在实际开发中有许多应用场景,例如:

  • 文件和目录的遍历:通过递归遍历文件夹和子文件夹,实现文件的查找、复制等操作。
  • 树的遍历:通过递归遍历二叉树或多叉树,实现查找、插入、删除等操作。
  • 数组和列表的操作:通过递归实现数组和列表的排序、搜索、合并等操作。

需要注意的是,递归可能会导致性能问题和堆栈溢出的风险。在使用递归时,需要合理设计递归终止条件,避免出现无限递归的情况。

5. 总结

递归是一种在函数内部调用自身的编程技巧,用于解决需要重复执行相同操作的问题。在Java中,递归通常通过定义递归函数来实现。递归函数需要满足基本情况、递归调用和问题规模减小的条件。递归在实际开发中有广泛的应用场景,但需要注意性能和堆栈溢出的问题。通过合理设计递归终止条件和优化递归算法,可以充分发挥递归的优势,解决复杂的问题。
在这里插入图片描述

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

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

相关文章

更换 yum 阿里源 - 手把手教你怎么配置,在也不需要求别人了 - 看懂一个就相当于看懂了其他的linux系统

更换阿里源 我的是centos8 当然 centos7 也可以换 后面有更详细的怎么配 &#xff0c;再也不用求别人怎么弄了 最直接的方式 直接复制 执行 centos7 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo或者 wget -O /etc/yum.repos.…

基于SpringBoot + Vue的项目整合WebSocket的入门教程

1、WebSocket简介 WebSocket是一种网络通信协议&#xff0c;可以在单个TCP连接上进行全双工通信。它于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936进行补充规范。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性…

酷雷曼第二期无人机技能培训圆满举办

第2期无人机技能培训 2023年8月24日-8月25日&#xff0c;第二期酷雷曼无人机技能培训及执照考试在北京圆满举办&#xff0c;来自五湖四海、全国各地的合作商千里相聚&#xff0c;培训现场热闹融洽&#xff0c;再续精彩盛况。 随着《无人驾驶航空器飞行管理暂行条例》正式发布…

性能测试 —— Jmeter 命令行详细

我们在启动Jmeter时 会看见&#xff1a;Don’t use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI) 这句话的意思就是说&#xff0c;不要使用gui模式进行负载测试&#xff0c;gui模式仅仅是创建脚本…

Mysql JSON

select json_extract(c2, $.a) select c2->"$.a" // json_extract的语法糖 &#xff08;取出的值会保留"双引号" so不适合实战&#xff09; 注&#xff1a;mysql若是引擎Mariadb则不支持json操作符-&#xff1e;&#xff1e;语法糖 select c2->…

扫地僧静态养站王站群:搜狗SEO站群收录养站效果

扫地僧静态养站王站群:Sogou搜狗SEO出站及收录效果,扫地僧静态站群采用了静态生成式的方式&#xff0c;只需要一个后台管理系统即可管理多个网站&#xff0c;大大提高了建站效率。建站大概45天左右&#xff0c;收录率百分之三十至百分之五十左右 如果对购买的域名进行把控&…

游戏思考30(补充版):关于逆水寒铁牢关副本、白石副本和技能的一些注释(2023/0902)

前期介绍 我是一名逆水寒的玩家&#xff0c;做一些游戏的笔记当作攻略记录下来&#xff0c;荣光不朽-帝霸来源视频连接 传送门 一、旧版铁牢关&#xff08;非逆水寒老兵服&#xff09; &#xff08;1&#xff09;老一&#xff1a;巨鹰 1&#xff09;机制一&#xff1a;三阵风…

ubuntu20.04 Supervisor 开机自启动脚本一文配置

前言: 最近发现一种非常好的开机启动服务方式,不光可以开机自启动,而且还可以进行开机节点的进程守护,这样大大确保了线程的稳定情况,这种服务甚至可以守护开机的进程,所以比之前设置 rc.local 开机自启动脚本一文配置节点好出很多,它甚至可以使用网页登录监管我开机自启…

手写RPC框架--4.服务注册

RPC框架-Gitee代码(麻烦点个Starred, 支持一下吧) RPC框架-GitHub代码(麻烦点个Starred, 支持一下吧) 服务注册 服务注册a.添加服务节点和主机节点b.抽象注册中心c.本地服务列表 服务注册 a.添加服务节点和主机节点 主要完成服务注册和发现的功能&#xff0c;其具体流程如下&…

【Springcloud】elk分布式日志

【Springcloud】elk分布式日志 【一】基本介绍【二】Elasticsearch【1】简介【2】下载【3】安装【4】启动 【三】Logstash【1】简介【2】下载【3】安装【4】启动 【四】Kibana【1】简介【2】下载【3】安装【4】启动 【五】切换中文【六】日志收集 【一】基本介绍 &#xff08;…

【测试开发】Mq消息重复如何测试?

本篇文章主要讲述重复消费的原因&#xff0c;以及如何去测试这个场景&#xff0c;最后也会告诉大家&#xff0c;目前互联网项目关于如何避免重复消费的解决方案。 Mq为什么会有重复消费的问题? Mq 常见的缺点之一就是消息重复消费问题&#xff0c;产生这种问题的原因是什么呢…

VMware 安装 黑群晖7.1.1-42962 DS918+

本例的用的文件 1、ARPL 1.0beat 引导文件 vmdk格式&#xff1a; https://download.csdn.net/download/mshxuyi/88309308 2、DS918_42962.pat&#xff1a;https://download.csdn.net/download/mshxuyi/88309383 一、引导文件 1、创建一个虚拟机 2、下一步&#xff0c;选稍后…

Linux图形栈入门概念

Mesa在图形栈中的位置 游戏引擎&#xff1a; 游戏引擎指的是一种软件框架&#xff0c;通过编程和各种工具&#xff0c;帮助开发者设计、构建和运行视频游戏。它相当于一个虚拟的世界创造工具&#xff0c;提供了各种功能模块和资源&#xff0c;如渲染引擎、物理引擎(碰撞检测、重…

HTTP代理只能代理HTTP协议吗?

HTTP代理是一种代理服务器&#xff0c;它可以充当客户端和服务器之间的中介&#xff0c;以帮助客户端访问服务器上的资源。但是&#xff0c;HTTP代理并不仅仅只能代理HTTP协议。 HTTP代理可以代理的协议 除了HTTP协议之外&#xff0c;HTTP代理还可以代理其他协议&#xff0c;例…

Apache实现weblogic集群配置

安装apache&#xff0c;安装相对稳定的版本。如果安装后测试能否正常启动&#xff0c;可以通过访问http://localhost/进行测试。安装Weblogic&#xff0c;参见文档将bea安装目录 weblogic81/server/bin 下的 mod_wl_20.so 文件copy到 apache安装目录下Apache2/modules/目录下A…

C++ 浅拷贝和深拷贝

目录 1. 浅拷贝 2. 深拷贝 1. 浅拷贝 浅拷贝只是拷贝一个指针&#xff0c;并没有新开辟一个地址&#xff0c;拷贝的指针和原来的指针指向同一块地址&#xff0c;如果原来的指针所指向的资源释放了&#xff0c;那么再释放浅拷贝的指针的资源就会出现错误 对一个已知对象进行拷贝…

【深入解析spring cloud gateway】06 gateway源码简要分析

上一节做了一个很简单的示例&#xff0c;微服务通过注册到eureka上&#xff0c;然后网关通过服务发现访问到对应的微服务。本节将简单地对整个gateway请求转发过程做一个简单的分析。 一、核心流程 主要流程&#xff1a; Gateway Client向 Spring Cloud Gateway 发送请求请求…

探索Apache Hive:融合专业性、趣味性和吸引力的数据库操作奇幻之旅

文章目录 版权声明一 数据库操作二 Hive数据表操作2.1 表操作语法和数据类型2.2 Hive表分类2.3 内部表Vs外部表2.4 内部表操作2.4.1 创建内部表2.4.2 其他创建内部表的形式2.4.3 数据分隔符2.4.4 自定义分隔符2.4.5 删除内部表 2.5 外部表操作2.5.1 创建外部表2.5.2 操作演示2.…

代码生成商业化一些思考

代码生成解决方案 生成项目代码有3大类的解决思路&#xff1a; 1.从底到上的生成&#xff0c;部分代码生成生成一行代码或者一个方法种一小块代码生成&#xff0c;ide插件代码生成基本这种思路 2.大语言模型作为软件工程不同角色agent&#xff0c;用户给出idea每个agent自动…

BFS练习1

BFS练习1 - 题目 - Daimayuan Online Judge 问题描述&#xff1a; 刚开始吓一跳&#xff0c;以为有什么更简单的呢&#xff0c;因为每一次都要走一次bfs&#xff0c;看了数据范围后&#xff0c;感觉跑一次bfs进行记录即可。 代码&#xff1a; void solve() {int a,k; cin>…