Java基础IO篇--递归

简介: Java基础IO篇--递归

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

前言

递归常用于实现查找功能实现,下面通过3个递归案例,来学习一下递归思想在Java中的应用。

一、递归

递归:指在当前方法内调用自己的这种现象。

public static void a(){\
   a();\
}

二、递归案例

2.1 递归求累加和

  • 需求:计算1 ~ n的和 【num的累加和 = num + (num-1)的累加和,所以可以把累加和的操作定义成一个方法,递归调用。
  • 分析:假设n的值为10,1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 [10的累加和] ====>>> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 [9的累加和] + 10
  • 代码实现:
public class Test {
    public static void main(String[] args) {
        System.out.println(getSum(10));
    }
    // 递归求n的累加和
    public static int getSum(int n) {
        // 给定一个结束条件
        if (n == 1) {
            return 1;
        }
        // n的累加和等价于 n + (n-1)的累加和
        return n + getSum(n - 1);
    }
    // 之前的思路,for循环求n的累加和
    public static int getSumFromFori(int n) {
        int sum = 0;
        for (int i = 0; i <= n; i++) {
            sum += i;
        }
        return sum;
    }
}

2.2 练习(递归求阶乘)

需求:求n的阶乘!

6的阶乘: 6 * 5 * 4 * 3 * 2 * 1

5的阶乘: 5 * 4 * 3 * 2 * 1

n的阶乘:n * (n-1)的阶乘!\

public class Test {
    public static void main(String[] args) {
        System.out.println(jieCheng(6));
    }
    public static int jieCheng(int n) {
        if (n == 1) {
            return 1;
        }
        return n * jieCheng(n - 1);
    }
}

2.3 文件搜索

  • 需求:搜索D:\Develop 目录中的.java 文件。\
  • 分析:
    D盘的Develop下面有很多内容:
    要么是文件!(这个文件如果是以.java结尾的,那么就获得其路径)
    要么是目录!
    继续获得该目录下面所有的内容:
    要么是文件!(这个文件如果是以.java结尾的,那么就获得其路径)
    要么是目录!
    继续获得该目录下面所有的内容:
    要么是文件!(这个文件如果是以.java结尾的,那么就获得其路径)
    要么是目录!
public class Test {
    public static void main(String[] args) {
        // 创建File对象
        File file = new File("D:/Develop");
        // 调用
        searchJavaFile(file);
    }
    public static void searchJavaFile(File file) {
        // 判断
        if (file.isDirectory()) {
            // 获得该目下所有的内容(可能是文件可能是目录),构成的数组
            File[] files = file.listFiles();
            // 遍历
            for (File file1 : files) {
                // 判断
                if (file1.isFile()) { // 文件!
                    // 判断是否以.java结尾的文件
                    if (file1.getName().endsWith(".java")) {
                        // 打印路径
                        System.out.println(file1.getAbsolutePath());
                    }
                } else {// 目录
                    // 递归调用
                    searchJavaFile(file1);
                }
            }
        }
    }
}

后记

在日常的开发中,我们使用递归一定要有条件限定,保证递归能够停止下来,次数不要太多,否则会发生栈内存溢出。 喜欢我的文章的朋友点点喜欢、收藏,也欢迎朋友们评论区留下你的意见和建议,恕毅在此拜谢!


相关文章
|
7月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
249 23
|
8月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
231 0
|
11月前
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
174 10
|
12月前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
327 57
|
12月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
298 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
12月前
|
搜索推荐 索引
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
154 2
|
12月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
111 0
|
12月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
150 1
|
12月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
432 1
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
91 1
java基础(11)函数重载以及函数递归求和

热门文章

最新文章