递归
一、概述
1.概述
从编程角度来看,递归指的是方法定义中调用方法本身的现象。
2.递归解决问题的思路
把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来解决,递归只需要少量的程序就可以描述出解决问题过程所需要的多次重复计算。
3.递归要解决的问题
- 递归出口:否则出现内存溢出
- 递归规则:与原问题相似的规模较小的问题
二、求阶乘
1.需求
求n阶乘,并把结果输出在控制台。
2.思路
- 定义一个方法,用于递归求阶乘,参数为一个int类型的变量
- 在方法内部判断变量值是否是1,是返回1,不是返回n*(n-1)
- 调用方法
- 输出结果
3.代码实现
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数:");
n = sc.nextInt();
System.out.println(n + "的阶乘是" + f(n));
}
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}
}
三、遍历目录
1.需求
给定一个路径,通过递归完成遍历该目录下的所有内容,并把所有文件的绝对路径输出在控制台。
2.思路
- 根据给定的路径创建一个File对象
- 定义一个方法,用于获取给定目录下的所有内容,参数为File
- 获取给定的File目录下的所有目录和文件的File数组
- 遍历该File数组
- 判断该File对象是否为目录,是则递归调用,不是则获取绝对路径并输出在控制台
- 调用方法
3.代码实现
package DiguiStudy;
import java.io.File;
public class Demo2 {
public static void main(String[] args) {
//根据路径创建File对象
File f = new File("D:\\_A");
//调用方法
getAllFilePath(f);
}
public static void getAllFilePath(File f){
//获取f的所有文件和目录数组
File[] sf = f.listFiles();
//遍历得到每一个File对象
if (sf != null){
for (File file : sf) {
if(file.isDirectory()){
getAllFilePath(file);
}else {
System.out.println(file.getAbsolutePath());
}
}
}
}
}