zoukankan      html  css  js  c++  java
  • 递归

    1.1 递归的概述

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

    public void method(){

    System.out.println(“递归的演示);

    //在当前方法内调用自己

    method();

    }

    递归分为两种,直接递归和间接递归。

    直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

    l 递归的代码演示,计算1-n之间的和,使用递归完成

    public class DiGuiDemo {

    public static void main(String[] args) {

    //计算1~num的和,使用递归完成

    int n = 5;

    int sum = getSum(n);

    System.out.println(sum);

     

    }

    public static int getSum(int n) {

    if(n == 1){

    return 1;

    }

    return n + getSum(n-1);

    }

    }

    l 代码执行流程图解

     

    注意:递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

    在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

    1.2 递归打印所有子目录中的文件路径

    编写一个方法用来打印指定目录中的文件路径,并进行方法的调用

    要求:若指定的目录有子目录,那么把子目录中的文件路径也打印出来

    步骤:

    1. 指定要打印的目录File对象

    2. 调用getFileAll()方法

    2.1 获取指定目录中的所有File对象

    2.2 遍历得到每一个File对象

    2.3 判断当前File 对象是否是目录

    判断结果为true,说明为目录,通过递归,再次调用步骤2getFileAll()方法

    判断结果为false,说明是文件,打印文件的路径

    l 代码演示

    public class FileDemo2 {

    public static void main(String[] args) {

    File file = new File("d:\test");

    getFileAll(file);

    }

    //获取指定目录以及子目录中的所有的文件

    public static void getFileAll(File file) {

    File[] files = file.listFiles();

    //遍历当前目录下的所有文件和文件夹

    for (File f : files) {

    //判断当前遍历到的是否为目录

    if(f.isDirectory()){

    //是目录,继续获取这个目录下的所有文件和文件夹

    getFileAll(f);

    }else{

    //不是目录,说明当前f就是文件,那么就打印出来

    System.out.println(f);

    }

    }

    }

    }

    1.3 搜索指定目录中的.java文件(含子目录)

    需求:打印指定目录即所有子目录中的.java文件的文件路径

    要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用

    若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来

    步骤:

    1. 指定要打印的目录File对象

    2. 调用getFileAll()方法,传入要打印的目录File对象

    2.1 通过FilenameFilter过滤器获取指定目录中的所有.java类型的File对象

    2.2 遍历得到每一个File对象

    2.3 判断当前File 对象是否是目录

    判断结果为true,说明为目录,通过递归,再次调用步骤2getFileAll()方法

    判断结果为false,说明是文件,打印文件的路径

    1.4 实现代码步骤

    l 测试类

    public class FileDemo4 {

    public static void main(String[] args) {

    File file = new File("d:\test");

    getFileAll(file);

    }

    //获取指定目录以及子目录中的所有的文件

    public static void getFileAll(File file) {

    File[] files = file.listFiles(MyFileFilter());

    //遍历当前目录下的所有文件和文件夹

    for (File f : files) {

    //判断当前遍历到的是否为目录

    if(f.isDirectory()){

    //是目录,继续获取这个目录下的所有文件和文件夹

    getFileAll(f);

    }else{

    //不是目录,说明当前f就是文件,那么就打印出来

    System.out.println(f);

    }

    }

    }

    }

    自定类继承FilenameFilter过滤器接口

    //定义类实现文件名称FilenameFilter过滤器

    class MyFileFilter implements FilenameFilter{

    public boolean accept(File dir, String name) {

    return name.endsWith(".java");

    }

    }

     

  • 相关阅读:
    WEB引入Google思源黑体
    Linux安装最新版Node.js
    JS判断值是否是数字
    高效jQuery的奥秘
    一个Web前端工程师或程序员的发展方向,未来困境及穷途末路
    javascript 模块化 (切记:学习思想)
    学习 正则表达式 js java c# python 通用
    Promise如何解决回调地狱
    VSCode 开发插件 推荐
    js移动端自适应动态设置html的fontsize
  • 原文地址:https://www.cnblogs.com/gaowc/p/10700173.html
Copyright © 2011-2022 走看看