当前位置: 代码迷 >> 综合 >> 递归的几个具体应用
  详细解决方案

递归的几个具体应用

热度:29   发布时间:2024-02-10 12:25:05.0

递归(递归方法):方法自己调自己

 应用1:计算x的y次方,如2的5次方

// 计算x的y次方,如2的5次方
public static int calc(int x, int y) {if (y == 0) {return 1;}return x * calc(x, y-1); // y = 5 return 2 * calc(2, 4)// y = 4  return	 2 * calc(2, 3)// y = 3  return		 2 * calc(2, 2)// y = 2  return			 2 * calc(2, 1)// y = 1  return				 2 * calc(2, 0)// y = 0  return					 1
}
// 注意:递归必须有退出条件,否则可能会出现死循环,此时会报栈溢出异常

应用2:递归获取目录下的所有文件,包括子目录下的文件

package code15_IO.test01_File;import java.io.File;/** 递归获取目录下的所有文件,包括子目录下的文件*/
public class Test04_递归获取目录下的文件 {public static void main(String[] args) {File file = new File("d:/resource");display(file);}public static void display(File file) {// 判断文件是否存在if (!file.exists()) {return;}// 判断是否为目录if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {if(f.isFile()){System.out.println(f.getAbsolutePath());}else{display(f);}}}else{System.out.println(file.getAbsolutePath());}}
}

应用3:删除指定目录下所有的空目录,包括子目录下的空目录

package code15_IO.test01_File;import java.io.File;/** 删除指定目录下所有的空目录,包括子目录下的空目录*/
public class 练习 {public static void main(String[] args) {File file = new File("d:/resource");remove(file);}public static void remove(File file) {// 判断是否为空目录if (file.isDirectory() && file.listFiles().length == 0) {file.delete();System.out.println("删除空目录:" + file.getAbsolutePath());// 删除当前目录后可能导致父目录也为空,所以需要对父目录进行处理remove(file.getParentFile());} else if (file.isDirectory()) {// 如果当前目录不为空目录,则获取目录下所有文件进行再处理File[] files = file.listFiles();for (File f : files) {remove(f); // 递归删除}}}
}

 

  相关解决方案