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);
                }
            }
        }
    }
}

后记

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


相关文章
|
6天前
|
Java Unix Windows
|
6天前
|
Java
java中递归实例
java中递归实例
19 0
|
6天前
|
监控 Java
Java一分钟之-NIO:非阻塞IO操作
【5月更文挑战第14天】Java的NIO(New IO)解决了传统BIO在高并发下的低效问题,通过非阻塞方式提高性能。NIO涉及复杂的选择器和缓冲区管理,易出现线程、内存和中断处理的误区。要避免这些问题,可以使用如Netty的NIO库,谨慎设计并发策略,并建立标准异常处理。示例展示了简单NIO服务器,接收连接并发送欢迎消息。理解NIO工作原理和最佳实践,有助于构建高效网络应用。
8 2
|
6天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
19 0
|
6天前
|
Java C语言
详解java方法与递归
详解java方法与递归
13 3
|
6天前
|
存储 缓存 Java
Java IO 流详解
Java IO 流详解
18 1
|
6天前
|
存储 Java
Java的`java.io`包包含多种输入输出类
【5月更文挑战第2天】Java的`java.io`包包含多种输入输出类。此示例展示如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着分配一个`byte`数组存储流中的数据。通过`read()`方法读取数据,然后将字节数组转换为字符串打印。最后关闭输入流释放资源。`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
51 1
|
6天前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
22 2
|
6天前
|
自然语言处理 Java 编译器
【Java探索之旅】方法重载 递归
【Java探索之旅】方法重载 递归
11 0
|
6天前
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作