**
* 递归练习:使用递归计算1-100的累加和
*
* @author zhuhuix
* @date 2020-05-31
*/
public class AddRecursion {
public static void main(String[] args) {
System.out.println(sum(100));
}
public static int sum(int n) {
if (n == 1) {
return 1;
} else {
return n + sum(n - 1);
}
}
}
输出
递归深入1:数据库关系(MYSQL)
2:程序持久层代码
2-1:程序持久层接口
List queryByPid(Integer pid);
2-2:程序持久层接口映射XML
select id, pid, roleName from digui.table_test where pid = #{pid}
这里的持久层是通过 父级的pid查询出对应的所有目录信息,以一个集合的形式返回
2:递归获取所有的目录(重点来了) @Override
public List findAllRole() {
List data = out(0);
return data;
}
private List out(int i) {
//查询当前pid对应的所有目录(该目录是用pid查询的,所以是对应的子目录)
List list= this.roleDao.queryByPid(i);
//如果集合的长度大于1,遍历集合,不然直接返回数据
if(list.size() > 0) {
for (Role role: list) {
//再通过其id作为pid查询他的下级目录
table.setList( out( role.getId() ) );
}
}
return list;
}
解释:
1:首先我在 findAllRole 方法中先第一此调用 out 方法,因为我们传入的参数是 pid(父级id),一级目录的pid我们默认是 0(随意),所以我们调用 out 方法时传入的参数时 0 ;
2:在 out 方法中我们首先先调用持久层接口,通过传入的参数 pid 获取所有的目录,这个时候我们需要判断集合的 长度 ,如果长度为0,说明这个pid对应的子目录是没有的(这个点注意,这个集合可能是一级目录集合,也可能是二三四级目录)。反之我们遍历,然后将遍历的每一个元素作为父级目录查询出子集然后set到实体中,看代码,看不懂就细品
最后贴出我最后查出来的结果:
[
{
"id": 1,
"pid": 0,
"rolename": "一级目录",
"list": [
{
"id": 2,
"pid": 1,
"rolename": "二级目录",
"list": [
{
"id": 3,
"pid": 2,
"rolename": "三级目录",
"list": [
{
"id": 4,
"pid": 3,
"rolename": "四级目录",
"list": []
}
]
}
]
}
]
}
]
递归打印多级目录:
package com.itheima.demo01.Recursion;
import java.io.File;
public class Demo03Recursion {
public static void main(String[] args) {
File file = new File("C:\Users\大 大\Desktop\aaa");
getAllFile(file);
}
//定义一个方法,参数传递File类型的目录,方法中对目录进行遍历
public static void getAllFile(File dir) {
//打印便利的目录名称
System.out.println(dir);
File[] files = dir.listFiles();
for (File f : files) {
//对遍历得到的File对象f进行判断,判断是否是文件夹
if(f.isDirectory()){
getAllFile(f);
}else {
//f是一个文件,直接打印即可
System.out.println(f);
}
}
}
}
综合案例:文件搜索(文件过滤)
找到以.java结尾的文件并输出
package com.itheima.demo01.Recursion;
import java.io.File;
public class Demo04Recursion {
public static void main(String[] args) {
File file = new File("C:\Users\大 大\Desktop\aaa");
getAllFile(file);
}
//定义一个方法,参数传递File类型的目录,方法中对目录进行遍历
public static void getAllFile(File dir) {
//打印便利的目录名称
//System.out.println(dir);
File[] files = dir.listFiles();
for (File f : files) {
//对遍历得到的File对象f进行判断,判断是否是文件夹
if(f.isDirectory()){
getAllFile(f);
}else {
//f是一个文件,直接打印即可
//需要将File对象f转为字符串对象
//1.
//String name = f.getName();
//2.
//String path = f.getPath();
//3.
String s = f.toString(); //toString()方法里面调用的其实就是getPath
//将字符串变成小写的
s = s.toLowerCase();
//判断字符串是不是以.java结尾,注意返回的是布尔型
boolean b = s.endsWith(".java");
if (b){
System.out.println(f);
}
//链式编程
if (f.getName().toString().toLowerCase().endsWith(".java")){
System.out.println(f);
}
}
}
}
}



