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


    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 (初始化; 循环条件; 循环迭代) {
        // 执行的代码块
    }
    
    • 1
    • 2
    • 3

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

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

    2.2 while循环

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

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

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

    int i = 1;
    while (i <= 10) {
        System.out.println(i);
        i++;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3 do-while循环

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

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

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

    int i = 1;
    do {
        System.out.println(i);
        i++;
    } while (i <= 10);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 循环控制语句

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

    3.1 break语句

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

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

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

    3.2 continue语句

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

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

    上面的示例中,当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时,直接返回1
            if (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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4. 递归的应用

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

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

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

    5. 总结

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

  • 相关阅读:
    第03章 用户和权限管理【1.MySQL架构篇】【MySQL高级】
    MySQL中的全表扫描和索引树扫描
    蓝牙协议之配对和绑定学习笔记
    【云原生进阶之PaaS中间件】第二章Zookeeper-1-综述
    传统光流方法汇总
    定时器学习
    【ML特征工程】第 4 章 :特征缩放的影响:从词袋到 Tf-Idf
    在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)
    【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard
    c++day3
  • 原文地址:https://blog.csdn.net/yangsimo/article/details/132768231