JAVA-递归案例

递归遍历全目录

* A: 递归遍历全目录
* a: 案例代码
/*
*  对一个目录的下的所有内容,进行完全的遍历
*  编程技巧,方法的递归调用,自己调用自己
*/
public class FileDemo {
public static void main(String[] args) {
File dir = new File("d:\\eclipse");
getAllDir(dir);
}
/*
*  定义方法,实现目录的全遍历
*/
public static void getAllDir(File dir){
System.out.println(dir);
//调用方法listFiles()对目录,dir进行遍历
File[] fileArr = dir.listFiles();
for(File f : fileArr){
//判断变量f表示的路径是不是文件夹
if(f.isDirectory()){
//是一个目录,就要去遍历这个目录
//本方法,getAllDir,就是给个目录去遍历
//继续调用getAllDir,传递他目录
getAllDir(f);
}else{
System.out.println(f);
}
}
}
}
 

16递归概念和注意事项

* A:递归概念和注意事项
* a: 递归概念
* 递归,指在当前方法内调用自己的这种现象
* 递归分为两种,直接递归和间接递归
* 直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
* b: 注意事项
* 递归一定要有出口, 必须可以让程序停下
* 递归次数不能过多

* 构造方法,禁止递归

17递归求和计算

* A: 递归求和计算
* a: 题目分析
* 1+2+3+...+(n-1)+n:求1到n的和
* 总结规律:1到n的和等于1到(n-1)的和再加n
* getSum(n-1)+ n
* 递归出口:getSum(1) return 1;

* b: 案例代码
/*
*  方法的递归调用
*    方法自己调用自己
*  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
*  注意:
*     递归一定要有出口, 必须可以让程序停下
*     递归次数不能过多
*     构造方法,禁止递归
*/
public class DiGuiDemo {
public static void main(String[] args) {
int sum = getSum(3);
System.out.println(sum);
}
/*
*  计算 1+2+3+100和 = 5050
*  计算规律:
*    n+(n-1)+(n-2)
*    100+(100-1)+(99-1)+...1
*/
public static int getSum(int n){
if( n == 1)
return 1;
return n + getSum(n-1);
}

}
 

18递归求阶乘

* A: 递归求和计算
* a: 题目分析
* 5!=5*4*3*2*1
*   =5*4!
* 4!=4*3!
* 3!=3*2!
* 2!=2*1!
* 1!=1
* n!=n*(n-1)!
* 递归出口:n*getJieCheng(n-1):  getJieCheng(1) return 1;
* b: 案例代码
/*
*  方法的递归调用
*    方法自己调用自己
*  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
*  注意:
*     递归一定要有出口, 必须可以让程序停下
*     递归次数不能过多
*     构造方法,禁止递归
*/
public class DiGuiDemo {
public static void main(String[] args) {
System.out.println(getJieCheng(5));

}

/* 
*  计算阶乘 5!
*   5*4*3*2*1
*/
public static int getJieCheng(int n){
if ( n == 1)
return 1;
return n * getJieCheng(n-1);
}
}

19递归计算斐波那契数列

* A: 递归计算斐波那契数列
* a:题目分析
* 1 1 2 3 5 8 13 21
* 从第三项开始,后面的每一项都等于前面两项的和,第一项和第二项的值为1,作为程序的出口
* b: 案例代码
/*
*  方法的递归调用
*    方法自己调用自己
*  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
*  注意:
*     递归一定要有出口, 必须可以让程序停下
*     递归次数不能过多
*     构造方法,禁止递归
*/
public class DiGuiDemo {
public static void main(String[] args) {
System.out.println(getFBNQ(12));
}
/*
*  方法递归,计算斐波那契数列
*  
*/
public static int getFBNQ(int month){
if( month == 1)
return 1;
if( month == 2)
return 1;
return getFBNQ(month-1)+getFBNQ(month-2);
}

}

20遍历目录下的所有java文件

* A: 遍历目录下的所有java文件
* a: 案例代码
public class MyJavaFilter implements FileFilter {
public boolean accept(File pathname) {
//判断获取的是目录,直接返回true
if(pathname.isDirectory())
return true;
return pathname.getName().toLowerCase().endsWith(".java");
}


}
/*
*  遍历目录,获取目录下的所有.java文件
*  遍历多级目录,方法递归实现
*  遍历的过程中,使用过滤器
*/
public class FileDemo1 {
public static void main(String[] args) {
getAllJava(new File("c:\\demo"));
// new File("c:\\demo").delete();
}
/*
* 定义方法,实现遍历指定目录
* 获取目录中所有的.java文件
*/
public static void getAllJava(File dir){
//调用File对象方法listFiles()获取,加入过滤器
File[] fileArr = dir.listFiles(new MyJavaFilter());
for(File f : fileArr){
//对f路径,判断是不是文件夹
if(f.isDirectory()){
//递归进入文件夹遍历
getAllJava(f);
}else{
System.out.println(f);
}
}
}

}

备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意)   QQ1156107728(添加注明来意)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值