递归的概述
递归,指在当前方法内调用自己的这种现象
public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); }
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
实例:
①计算1-n之间的和,使用递归完成
public class demo4 { //递归:要运行的方法主体不变,而参与运行的方法参数会变 //递归必须要有一个出口,否则程序没有意义 public static void main(String[] args) { System.out.println(getnum(1000)); } //计算1-100和,用递归做 public static int getnum(int n){ if(n==1){ return 1; } return n+getnum(n-1); } //3+getnum(2) // 2+getnum(1) // 1 //最终赋值给调用者,往上一直传给调用者 }
②递归打印所有子目录中的文件路径
public class FileDemo2 { public static void main(String[] args) { File file = new File("d:\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
③搜索指定目录中的.java文件(含子目录)
public class myfl implements FileFilter{ @Override public boolean accept(File pathname) { //如果是文件夹则不进行过滤,直接加到File数组中 if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".java"); } }
//找到指定目录下的所有指定文件类型的文件 public class demo5 { public static void main(String[] args) { File file=new File("e:\test"); getallfile(file); } public static void getallfile(File file){ File[] files=file.listFiles(new myfl()); for(File f:files){ if(f.isDirectory()){ getallfile(f); }else{ System.out.println(f); } } } }
④计算n!
public class demo6 { public static void main(String[] args) { System.out.println(getnum(20)); } public static long getnum(int n){ if(n==1){ return 1; } return n*getnum(n-1); } }