(黑马程序员)递归思想和及其应用

 递归思想:

 函数自身直接或者间接的调用到了自身。一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关。 这时可以用递归来解决问题。  

 注意:

 1,递归一定明确条件。否则容易死循环。 

 2,注意一下递归的次数。太多的话影响效率。

如求1~某整数之间的各个整数的和,可以用递归思想这样编程

public static int getSum(int num){

if(num==1)

return 1;

return num+getSum(num-1); //递归

}

递归思想的应用:深度遍历文件夹。

因为深度遍历要一层一层的调用同样的方法并作同样的判断,所以就用递归最好。同样删除文件夹时也要层层遍历从最里面开始删除,也用递归较好。例如以下的类定义了遍历并打印和删除的方法:

class Traverse {

public static void removeall(File f){

if(f.isDirectory()){    //判断是否是目录

File[] farr=f.listFiles();

for(int i=0;i<farr.length;i++){   //遍历当前目录

removeall(farr[i]);     //递归,调用了函数本身自己

}

System.out.println(f+":"+f.delete());  //删除文件夹

}

else{

System.out.println(f+":"+f.delete());   //是文件,则直接删除

}

}

public static void listAll(File f) {   //定义深度遍历方法

TraverselistAll(f, 0);

}

private static void TraverselistAll(File f, int level) {  //深度便利方法具体体现

System.out.println(getSpace(level) + f.getName());

不管是不是目录,先打印出来

if (f.isDirectory()) {

level++;

File[] farr = f.listFiles();

for (int i = 0; i < farr.length; i++) {

TraverselistAll(farr[i], level);   //递归,调用了自身

}

}

}

private static String getSpace(int level) {  //这个是为了打印好看,形成分支结构的函数

StringBuilder sb = new StringBuilder();

sb.append("|--");

for (int i = 0; i < level; i++) {

sb.insert(0, "   ");

}

return sb.toString();

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值