Java_IO流——递归方法


文件内容遍历--递归方法

1.概述
方法定义中调用方法本身的现象,用来解决在文件夹中查找文件的问题,就是文件的嵌套隐藏。

2.使用递归的注意事项
(1).递归一定要有出口,否则就是死递归
(2).递归的次数不能太多,否则就会出现内存溢出
(3).构造方法不能够使用递归

3.递归的使用思想
递归一定要针对有规律的数据进行,对于没有规律的数据,是不能够使用递归来操作的。

递归解决问题的思想:
分解法:把一个不能够解决的问题拆分成为几个能够解决的小问题,直到每一个小问题都能够解决为止。
合并法:把几个小问题合并成为一个大问题解决。

4.递归基本使用
(1).求5的阶乘
使用递归实现:
a:做递归要写一个方法
b:出口条件
c:规律

代码实现:
public class Test {
public static void main(String[] args) {
System.out.println(jc(5));
}

/**
* 递归实现阶乘
* @param int n
* @return int
* 出口条件: if(n==1){return 1}:也就是分解到最底层的一个基本性认识事物为止
* 规律:if(n!=1){return n*方法名(n-1)}
*/
public static int jc(int n){
if(n==1){
return 1;
}else{
return n*jc(n-1);
}
}
}
//输出结果:
120

(2).斐波那契数列
A:数据规律:1,1,2,3,5,8......

B:规律:
a:从第三项开始,每一项是前俩个项之和
b:同时说明前俩项是已知的。

C:程序实现分析
a:使用数组
b:变量变化实现
c:递归实现

D:代码实现
public class Test {
public static void main(String[] args) {
System.out.println(fbnqArr(20));

}
public static int fbnqArr(int n){
if(n==1||n==2){
return 1;
}else{
return fbnqArr(n-1)+fbnqArr(n-2);
}
}
}
//输出结果
6765

(3).递归输出指定目录下面所有以.txt结尾的文件的绝对路劲(类似于一个全盘扫描)
A:程序流程分析
a:封装目录
b:获取该目录下民所有文件或者是文件夹的File数组
c:遍历该File数组,获得每一个File对象
d:判断该File对象是否是文件夹
是:回到b(就是把该文件夹当做是根目录来获取,就是进去这一个文件夹中查看是否存在着文件,这样就可以获取所有的文件)
也就是递归的规律
否:判断是否以.txt结尾(递归中的出口条件)
是:就输出该文件的绝对路劲
否:不搭理


B:代码实现
public class Test {
public static void main(String[] args) {
//封装目录
File fl=new File("E:\\demo");
getAllTxtFilePaths(fl);
}

/**
* 获取所有的以.txt结尾的文件
* @author Administrator
* @param File fl:需要查找的文件目录
* @ return
*
*/
private static void getAllTxtFilePaths(File fl){
//获取所有文件或者是文件夹的File数组
File[] fileArray=fl.listFiles();
//遍历获取所有的File对象
for(File file:fileArray){
//判断该file对象是否是文件夹
if(file.isDirectory()){
getAllTxtFilePaths(file);
}else{
//判断是否是以.txt结尾
if(file.getName().endsWith(".txt")){
//输出该文件的绝对路劲
System.out.println(file.getAbsolutePath());
}
}
}
}
}
//输出结果
E:\demo\数据测试结果__01.txt
E:\demo\数据测试结果__02.txt
E:\demo\数据测试结果__03.txt
E:\demo\数据测试结果__04.txt 

猜你喜欢

转载自www.cnblogs.com/nwxayyf/p/9500535.html