递归
递归,指在当前方法内调用自己的这种现象
注意 :1.必须有出口,否则无意义
2.构造方法不能递归
3.递归次数不能过多
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
例子1-3的和内存图

package com.oracle.demo03;
public class Demo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(add(5));
}
//用递归计算1-n的和
/*1-100=
* 100+99+98--+1
* 100+(100-1)+(99-1)+..+1
* n+(n-1)+(n-1-1)+(n-1-1-1)+...+1
* */
public static int add(int n){
if (n==1) {
return 1;
}else{
return n+add(n-1);
}
}
}
1.递归打印所有子目录中的文件路径
步骤
1. 指定要打印的目录File对象
2. 调用getFileAll()方法
2.1 获取指定目录中的所有File对象
2.2 遍历得到每一个File对象
2.3 判断当前File 对象是否是目录
判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法
判断结果为false,说明是文件,打印文件的路径
package com.oracle.demo03;
import java.io.File;
public class Demo03 {
public static void main(String[] args) {
File f=new File("D:\\demo1018");
get(f);
}
public static void get(File file) {
//获取file对象表示的文件下的所有文件和文件夹
File files[]=file.listFiles();
//遍历
for (File f : files) {
//如果是文件夹,则继续调用get方法获取改路径下的所有文件
if (f.isDirectory()) {
get(f);
System.out.println(f);
} else {
//如果是文件直接打印
System.out.println(f);
}
}
}
}
2.搜索指定目录中的.txt文件(含子目录)
把递归打印所有子目录中的文件路径步骤中2.1改为通过FilenameFilter过滤器获取指定目录中的所有.txt类型的File对象
package com.oracle.demo03;
import java.io.File;
public class Demo04 {
public static void main(String[] args) {
File f=new File("D:\\demo1018");
get(f);
}
public static void get(File file) {
//获取file对象表示的文件下的所有文件和文件夹
File files[]=file.listFiles(new MyFilter());
//遍历
for (File f : files) {
//如果是文件夹,则继续调用get方法获取改路径下的所有文件
if (f.isDirectory()) {
get(f);
//System.out.println(f);
} else {
//如果是文件直接打印
System.out.println(f);
}
}
}
}
package com.oracle.demo03;
import java.io.File;
import java.io.FileFilter;
public class MyFilter implements FileFilter {
public boolean accept(File pathname) {
if (pathname.exists()) {
if (pathname.isFile()) {
//获取file对象的文件名
//String name=pathname.getName().toLowerCase();
return pathname.getName().toLowerCase().endsWith(".txt");
}
return true;
}
return false;
}
}
浙公网安备 33010602011771号