说到递归,不得不说一个经典的公式:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*),也就是斐波那契数列(Fibonacci sequence),又称黄金分割数列。
转换成代码来表示:
public static int f(int i){
if(i == 1){
return 1;
}else if(i == 2){
return 2;
}else{
return f(i-1) + f(i - 2);
}
}
这里介绍两种我在实际编码中用到递归的地方
1、查找当前文件目录下的所有文件
public static List<File> getAllFile(File file, String regex, List<File> fileList){
for (File item : file.listFiles()) {
if(item.isDirectory())
getAllFile(item, regex, fileList);
else{
if(item.getName().matches(regex))//正则匹配过滤
fileList.add(item);
}
}
return fileList;
}
2、在根据用户id查询下级所有用户时候,(DB中每个用户都有0个或多个上级用户)
public Set<String> getAllIds(Set<String> userIds){
Set<String> nextUserIds = userMapper.getNextUserIdByUserIds(userIds);
nextUserIds.addAll(userIds);
if(userIds.size() == nextUserIds.size()){
return nextUserIds;
}else{
return getAllIds(nextUserIds);
}
}
<!--获取多个用户绑定下级id集合-->
<select id="getNextUserIdByUserIds" resultType="java.lang.String">
select
sus.user_id
from
sys_user_super sus
where 1=1
and sus.super_id in
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId}
</foreach>
</select>