A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 传奇查 于 2015-11-22 18:20 编辑

感觉对你有用就给个鼓励吧~~

总结了4个通用案列~不多说~看代码~
需求:列出指定目录下所有目录(包含子目录内的目录)
  1. package cn.fuxi._08io;
  2. /**
  3. * 递归
  4. * 函数自身直接或者间接的调用到了自身.
  5. * 一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关.这时可以用递归来解决问题
  6. *
  7. * P.S.
  8. * 1.递归一定明确条件,否则容易栈溢出.
  9. * 2.注意一下递归的次数.
  10. *
  11. * 需求:对指定目录经行所有内容的列出(包含子目录中的内容),也可以理解为深度遍历
  12. */
  13. import java.io.*;
  14. public class _02FileRecursiveDemo1 {
  15.         public static void main(String[] args) {
  16.                 File dir = new File("D:\\develop\\workspace\\fuxi4\\src");
  17.                 int level = 0;//目录层级
  18.                 listAll(dir,level);
  19.         }
  20.         public static void listAll(File dir ,int level){
  21.                 System.out.println(getSpace(level)+"dir:"+dir.getAbsolutePath());//getSpace()打印出更直观的效果,或者直接用level取代该方法用数字表示也可以
  22.                 level++;
  23.                 File[] files = dir.listFiles();//获取完整路径名
  24.                 //基本for循环,或者增强for循环二选一~
  25.                 /*
  26.                   for(int x = 0 ;x < files.length;x++){
  27.                         if(files[x].isDirectory()){
  28.                                 listAll(files[x],level);
  29.                         }
  30.                 }
  31.                 */
  32.                 //增强for循环
  33.                 for(File ff:files){
  34.                         if(ff.isDirectory()){
  35.                                 listAll(ff,level);
  36.                         }
  37.                 }
  38.         }
  39.         public static String getSpace(int level){
  40.                 StringBuilder sb = new StringBuilder();//创建容器接收字符串输出效果
  41.                 sb.append("|--");
  42.                 for(int x = 0;x< level; x++){
  43.                         sb.append("|");//输出时每多一道"|"代表多一级子类目录
  44.                 }
  45.                 return sb.toString();
  46.         }
  47. }
复制代码
输出结果:
|--dir:D:\develop\workspace\fuxi4\src
|--|dir:D:\develop\workspace\fuxi4\src\cn
|--||dir:D:\develop\workspace\fuxi4\src\cn\fuxi
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_01system
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_02runtime
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_03math
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_04date
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_05calendar
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_06io
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_07io
|--|||dir:D:\develop\workspace\fuxi4\src\cn\fuxi\_08io


需求:利用递归求任意正整数的十以内进制值
  1. package cn.fuxi._08io;
  2. /**
  3. * 需求:利用递归求任意正整数的十以内进制值
  4. */
  5. public class _03FileRecursiveDemo2 {
  6.         public static void main(String[] args) {
  7.                 int x = 10;
  8.                 int radix = 8;
  9.                 toBinary(x,radix);
  10.         }
  11.         public static void toBinary(int x,int radix){
  12.                 if(x>0){//如果x是大于0的
  13.                         toBinary(x/radix,radix);//递归调用本函数,参数除以进制数
  14.                         System.out.print(x%radix);//输出除以进制数余下的数
  15.                 }
  16.         }
  17. }
复制代码
输出结果:
12

需求:利用递归求任意数到任意数的和
  1. package cn.fuxi._08io;
  2. /**
  3. * 需求:利用递归求任意数到任意数的和
  4. */
  5. public class _04FileRecursiveDemo3 {
  6.         public static void main(String[] args) {
  7.                 int a = 19;
  8.                 int b = 298;
  9.                 System.out.println(getSum(a,b));
  10.         }
  11.         public static int getSum(int a,int b){
  12.                 if(a==b){//用在初始值a和b就相同时,还有最终a或b增长到一样大时
  13.                         return a;//或return b;
  14.                 }else if(a<b){//a<b的话,递归a到b的和
  15.                         return a+getSum(a+1,b);
  16.                 }else{//a>b的话,递归b到a的和
  17.                         return b+getSum(a,b+1);
  18.                 }
  19.         }
  20. }
复制代码
输出结果:
44380

需求:删除一个带内容的目录.
  1. package cn.fuxi._08io;
  2. /**
  3. * 需求:删除一个带内容的目录.
  4. * 原理:必须从里往外删,需要进行深度遍历.
  5. */
  6. import java.io.*;
  7. public class _05FileRecursiveDemo4 {
  8.         public static void main(String[] args) {
  9.                 File dir = new File("D:\\develop\\workspace\\fuxi4\\a");
  10.                 removeDir(dir);
  11.         }
  12.         public static void removeDir(File dir){//记住是先删内层
  13.                 File[] files = dir.listFiles();//注意:list()和listFiles()的区别,list()是文件内的文件的【字符串文件名】,listFiles()是文件内的文件的【完整路径名】.
  14.                 for(File ff: files ){//先增强for循环,取到每个子文件的路径,由内往外删除
  15.                         if(ff.isDirectory()){//是文件目录吗?
  16.                                 removeDir(ff);//是的话就递归进入循环
  17.                         }else{//不是目录的话就打印并删除(内层)
  18.                                 System.out.println(ff +":"+ff.delete());
  19.                         }
  20.                 }//跳出循环,外层不是目录的话就打印并删除
  21.                 System.out.println(dir+":"+dir.delete());
  22.         }        
  23. }
复制代码
输出结果:
D:\develop\workspace\fuxi4\a\asd\b:true
D:\develop\workspace\fuxi4\a\asd\c\abc:true
D:\develop\workspace\fuxi4\a\asd\c:true
D:\develop\workspace\fuxi4\a\asd:true
D:\develop\workspace\fuxi4\a\sadgsd:true
D:\develop\workspace\fuxi4\a\新建文件夹\a\sda:true
D:\develop\workspace\fuxi4\a\新建文件夹\a:true
D:\develop\workspace\fuxi4\a\新建文件夹:true
D:\develop\workspace\fuxi4\a:true


感觉对你有用就给个鼓励吧~~



1 个回复

倒序浏览
【HOT持续更新……】必看【一张贴搞定JAVASE系列】汇总~!!
http://bbs.itheima.com/thread-262555-1-1.html
(出处: 黑马程序员IT技术论坛)

递归问题原来困扰死我了都~多总结,多巩固~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马