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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李云贵 中级黑马   /  2014-7-24 09:18  /  712 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

递归函数
函数自身直接或者间接的调用到了自身。
一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关。
注意:1,递归一定明确条件。否则容易栈溢出。
2,注意一下递归的次数。
public static int getSum(int num){
if(num==1) return 1;
return num + getSum(num-1);
}
public static void toBin(int num){
if(num>0){
toBin(num/2);
System.out.println(num%2);
}
}
toBin(6)分析
6  num%2输出0
3  num%2输出1
1  num%2输出1
0

列出指定目录下所有内容:使用递归 。。函数自己调用自己
public static void listAll(File dir,int level) {
System.out.println(getSpace(level)+dir.getName());//因为传入的是文件夹(目录),先把文件夹打印出来
level++;
File[] files = dir.listFiles();
for(int x=0; x< files.length; x++){
if(files[x].isDirectory()){
listAll(files[x],level);
}
else
System.out.println(getSpace(level)+files[x].getName());
}
}

//打印"|  " + "|--"。level控制"|  "
private static String getSpace(int level) {
StringBuilder sb = new StringBuilder();
sb.append("|--");
for(int x=0; xx< level; x++){
sb.insert(0,"|  ");
}
return sb.toString();
}
}
输出
|--test
|  |--test1
|  |  |--test11.txt
|  |--test1.txt


分析
(dir  level=0 )  输出 test
level++,for循环,[0]为test1目录递归
                (test1 level=1 ) 输出test1
                level++,for循环,[0]不为目录,输出test11.txt
level=1 输出test1.txt
   


删除一个带内容的目录:
原理:从里面往外删除,就需要递归
public static void main(String[] args) {

File dir  = new File("d:\\test");
// dir.delete();
removeDir(dir);
}

public static void removeDir(File dir) {
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
removeDir(file);
}else{
System.out.println(file+":"+file.delete());
}
}
System.out.println(dir+":"+dir.delete());
}


输出
d:\test\test1\test11.txt:true
d:\test\test1:true
d:\test\test1.txt:true
d:\test:true




1 个回复

倒序浏览
学习学习。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马