1. 递归,就是方法自己调用自己。
-
5的阶乘
-
View Code
- 所有方法都在栈内,直到fun(1)执行完,开始逐步弹栈。
- 递归的缺点:如果调用的次数过多,容易出现栈内存溢出
- 递归的优点:不用知道循环的次数
- 问题:构造方法是否可以递归调用?
- 不能
- 问题:递归调用是否必须有返回值?
- 不一定,可以有,也可以没有
- 如:一个给定文件夹路径下的所有的.java文件名
-
需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
-
View Code
-
2. 递归练习1:统计该文件夹大小
-
需求:从键盘接收一个文件夹路径,统计该文件夹大小
-
View Code
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; } }