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

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中,递归通常通过定义递归函数来实现。递归函数需要满足基本情况、递归调用和问题规模减小的条件。递归在实际开发中有广泛的应用场景,但需要注意性能和堆栈溢出的问题。通过合理设计递归终止条件和优化递归算法,可以充分发挥递归的优势,解决复杂的问题。
在这里插入图片描述

相关文章:

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

文章目录 Java循环1. 什么是循环&#xff1f;1.1 为什么需要循环&#xff1f;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. 递归的…...

架构师成长之路|Redis实现延迟队列的三种方式

延迟队列实现 基于监听key过期实现的延迟队列实现,这里需要继承KeyspaceEventMessageListener类来实现监听redis键过期 public class KeyExpirationEventMessageListener extends KeyspaceEventMessageListener implementsApplicationEventPublisherAware {private static f…...

51单片机智能电风扇控制系统proteus仿真设计( 仿真+程序+原理图+报告+讲解视频)

51单片机智能电风扇控制系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 讲解视频1.主要功能&#xff1a;2.仿真3. 原理图4. 程序代码5.设计报告6. 设计资料内容清单 51单片机智能电风扇控制系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 仿真图…...

【设计模式】Head First 设计模式——工厂方法模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 定义一个用于创建对象的接口&#xff0c;让子…...

【爬虫】7.2. JavaScript动态渲染界面爬取-Selenium实战

JavaScript动态渲染界面爬取-Selenium实战 爬取的网页为&#xff1a;https://spa2.scrape.center&#xff0c;里面的内容都是通过Ajax渲染出来的&#xff0c;在分析xhr时候发现url里面有token参数&#xff0c;所有我们使用selenium自动化工具来爬取JavaScript渲染的界面。 fr…...

c语言实训心得3篇集合

c语言实训心得体会一&#xff1a; 在这个星期里&#xff0c;我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前&#xff0c;我们已经对c语言这门课程学习了一个学期&#xff0c;对其有了一定的了解&#xff0c;但是也仅仅是停留在了解的范围&#xff0c;对里…...

2023高教社杯数学建模B题思路代码 - 多波束测线问题

# 1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到…...

MySql 变量

1.系统变量 1.1 系统变量分类 变量由系统定义&#xff0c;不是用户定义&#xff0c;属于 服务器 层面。系统变量分为全局系统变量&#xff08;需要添加 global 关键字&#xff09;以及会话系统变量&#xff08;需要添加 session 关键字&#xff09;&#xff0c;有时也把全局系…...

2023-简单点-make和build都是什么东西?

make make命令根据makefile.txt中的命令进行批量处理。 编译时自动检查文件是否更新&#xff0c;如果文件已经更改&#xff0c;make会对他重新编译&#xff0c;否则跳过。 编译选定的目标&#xff0c;但是Make只编译上次编译变化过的文件&#xff0c;减少重复劳动&#xff0…...

Nginx 学习(八)Nginx实现用IP测试灰度发布

1.1 问题 配置Nginx使其可以将动态访问转交给uWSGI&#xff1a; 1.2 方案 安装Python工具及依赖 安装uWSGI并编写配置文件 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一&#xff1a; 1)安装python依赖软件[rootproxy python]# yum -y install gcc make pytho…...

QT 自定义信号

自定义信号&#xff0c;需要 1.在singnals:区域下写信号函数&#xff0c;以及函数对应的参数 2. 需要emit关键字进行发射信号 3. 在需要处理该信号的其他类中&#xff0c;建立信号和其信号槽函数connect() 4. 在其他类中创建信号处理槽函数 #include "mythread.h"my…...

注解方式配置SpringMVC

注解配置SpringMVC 1. 初始化类&#xff0c;代替web.xml2. 创建SpringConfig配置类&#xff0c;代替spring的配置文件3. 创建SpringMVCConfig配置类&#xff0c;代替SpringMVC.xml配置文件4. 项目结构 1. 初始化类&#xff0c;代替web.xml Spring3.2引入了一个便利的WebApplic…...

2023年限售股解禁研究报告

第一章 概述 解禁是指限售流通股过了限售承诺期&#xff0c;可以在二级市场自由买卖的过程。根据流通性质&#xff0c;可将上市公司股份分为有限售条件的流通股&#xff08;“限售流通股”&#xff09;及无限售条件的流通股&#xff08;“流通股”&#xff09;。 限售流通股指…...

『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用

08 Qt Designer中容器布局和绝对布局的使用 1 容器布局1.1 设计容器布局1.2 保存文件并执行2 绝对布局2.1 设计绝对布局2.2 保存文件并执行1 容器布局 1.1 设计容器布局 先拖入一个容器Frame容器,然后拖入几个控件: 把拖入的控件拖入容器中: 选中容器,右键-布局-栅格布局:…...

Android 下第一个fragment app 先Java 后Kotlin

看着视频学习的&#xff0c;Fragment&#xff1a;3.Fragment使用方法_哔哩哔哩_bilibili 程序的运行效果是&#xff0c;手机页面有2个fragment&#xff0c;每个fragment 有一个text view&#xff0c;一个按钮&#xff0c;按一下显示&#xff0c;fine,and you?&#xff0c;各自…...

行业追踪,2023-09-04

自动复盘 2023-09-04 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

Android MQTT:实现设备信息上报与远程控制

Android MQTT&#xff1a;实现设备信息上报与远程控制 1. 介绍 1.1 MQTT是什么&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;最初由IBM开发&#xff0c;用于连接远程设备与服务器之间的通信。它在物…...

Python爬虫——新手使用代理ip详细教程

Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。代理IP的作用是可以为爬虫提供多个IP地址&#xff0c;从而加快其爬取数据的速度&#xff0c;同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和使用。 一、代理IP的…...

idea VCS配置多个远程仓库

Idea VCS配置多个远程仓库 首先要有连个远程仓库地址 idea 添加数据源 查看推送记录 添加数据源 ok之后填写账号密码 推送本地项目 选择不同远程地址 push 查看不同远程地址的 不同分支的 推送记录 不期而遇的温柔&#xff1a; 应用开源架构进行项目开发&#xff0c;特别是那…...

LKPNR: LLM and KG for Personalized News Recommendation Framework

本文是LLM系列文章&#xff0c;针对《LKPNR: LLM and KG for Personalized News Recommendation Framework》的翻译。 LKPNR:LLM和KG的个性化新闻推荐框架 摘要1 引言2 相关工作3 问题定义4 框架5 实验6 案例7 结论 摘要 准确地向用户推荐候选新闻文章是个性化新闻推荐系统面…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...