递归
用递归的方法计算1~n
/**
* 递归 在一个方法内部 对自身进行调用
* 用简单的程序解决复杂的问题
* 构造函数不能用递归 必须要有 结束的条件(保证其能停下来 要不然会有占内存溢出)
* 直接递归 和间接递归
* main方法压栈执行 直接递归方法 调用方法 会在栈内存中一直调用a
*
* 使用递归时 首先要判断他的结束条件是什么 在判断他的方法目的 是加减乘除
*
*/
public class Demo {
public static void main(String[] args) {//程序执行的入口
//构造函数不能递归 计算1到n之间的和不推荐 建议使用for循环
/*int sum1 = sum(3);
System.out.println(sum1);*/
int j=jc(5);
System.out.println(j);
}
public static int sum(int n){//n是3 2 1(结束条件)
//获取到下一个被加的数字
if (n==1){//结束条件 到1 未知
return 1;
}
return n+sum(n-1);//结束条件
}
//5的阶乘 5 4 3 2 1(结束条件是1) 目的乘法的目的 方法的主体不变 参数改变
public static int jc(int a){
if (a==1){
return 1;
}
return a*jc(a-1);
}
}
递归打印多及目录 递归就会用到方法
文件搜索 递归
过滤器 递归文件搜索的优化 用于过滤文件 抽象方法 过滤文件accept
fileFilter 抽象路径名的过滤器 fileNameFilter 实现此接口的类是咧可用于过滤器文件名 file dir目录
过滤规则
public class FileNameFilter {
public static void main(String[] args) {
File file1 =new File("F:\\ideawork");
getAllFile(file1);
}
public static void getAllFile(File dir){
// System.out.println(dir);
/**
* 过滤规则 pathname 是文件或者是.java结尾的文件返回true
* 匿名内部类 传递对象
*/
// FileFilter fileFilter = new FileFilter();
//File[] files=dir.listFiles(fileFilter);
/* File[] files=dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//过滤队则 pathname是文件加.java
return pathname.isDirectory()||pathname.getName().endsWith(".java");
}
});*/
//匿名内部类只用lambda表达式
/* File[] files = dir.listFiles((File pathname)->{
return pathname.isDirectory()||pathname.getName().endsWith(".java");
});*/
//简化
File[] files = dir.listFiles((/*File*/ pathname)-> pathname.isDirectory()||pathname.getName().endsWith(".java")
);
/*
File[] files=dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
});*/
//使用lambda表达式 优化匿名内部类 接口中只有一个抽象方法accept
/* File[] files=dir.listFiles((*//*参数*//*File d,String name)->{
return new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java");
});*/
//简略lambda
/*File[] files=dir.listFiles((*//*参数*//**//*File*//* d,*//*String*//* name)->
*//*return*//* new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java")
);*/
//
for (File file : files) {
if (file.isDirectory()){
getAllFile(file);
}else {
System.out.println(file);
}
}
}