1. 递归,就是方法自己调用自己。

  • 5的阶乘

  • View Code
  • 【JAVA基础】24 递归练习
  • 所有方法都在栈内,直到fun(1)执行完,开始逐步弹栈。
  • 递归的缺点:如果调用的次数过多,容易出现栈内存溢出
  • 递归的优点:不用知道循环的次数
  • 问题:构造方法是否可以递归调用?
    • 不能
  • 问题:递归调用是否必须有返回值?
    • 不一定,可以有,也可以没有
    • 如:一个给定文件夹路径下的所有的.java文件名
  • 需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

    • View Code

 

2. 递归练习1:统计该文件夹大小

  • 需求:从键盘接收一个文件夹路径,统计该文件夹大小

  • package com.heima.test;
    
    import java.io.File;
    import java.util.Scanner;
    
    public class Test1 {
    
        /**
        需求:从键盘接收一个文件夹路径,统计该文件夹大小
         */
        public static void main(String[] args) {
            
            
            File dir = getDir();
            System.out.println(getDirLength(dir));
            
        }
        
        /*
         * 对键盘输入的路径进行条件判断
         */
        public static File getDir() {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个文件夹路径:");
            
            while(true){
                String line = sc.nextLine();
                File dir = new File(line);
                
                if(dir.exists()) {
                    if(dir.isFile()) {
                        System.out.println("对不起,您输入的是文件路径,不是文件夹路径,请重新输入:");
                    } else if(dir.isDirectory()) {
                        return dir;
                    } 
                } else {
                    System.out.println("对不起,您输入的路径不存在,请重新输入:");
                }
            }
        }
        
        /*
         * 统计该文件夹大小
         * 1. 定义一个求和变量
         * 2. 获取该文件夹下所有的文件和文件夹listFiles();
         * 3. 遍历数组
         * 4. 判断是否是文件就计算大小并累加
         * 5. 判断是文件夹就递归调用
         */
        public static long getDirLength(File dir) {
            long dirLength = 0;
            
            File[] subFiles = dir.listFiles();
            for (File subFile : subFiles) {
                if(subFile.isFile()) {
                    dirLength += subFile.length(); // length()方法无法直接获取文件夹的大小,返回值是0
                } else {
                    dirLength += getDirLength(subFile);
                }
            }
            return dirLength;
        }
    }
    View Code

相关文章:

  • 2022-01-02
  • 2022-01-19
  • 2021-09-27
  • 2022-12-23
  • 2019-09-01
  • 2021-10-23
  • 2022-12-23
  • 2021-06-03
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-10
  • 2021-10-19
  • 2021-12-21
  • 2022-01-08
相关资源
相似解决方案