1、什么是递归调用
递归调用也可称为函数嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间互相调用能产生循环的就称为递归调用。
结论:简单来讲递归调用主要体现在函数的调用上,当前函数自己调用自己
2、递归调用的书写格式
递归调用可以分为两种:
1、 直接递归:函数自己调用自己
2、 间接递归:借助其实的函数来调用自己
例:函数A调用函数B,函数B调用函数C,函数C调用函数A
直接递归的书写格式:
访问修饰符 返回值类型 函数名 (参数类型 参数名,...){
//函数自己调用自己
当前函数的名称(参数类型 参数名,...);
}
间接递归的书写格式:
访问修饰符 返回值类型 函数名1 (参数类型 参数名,...){
//调用函数2
函数名2(参数类型 参数名,...);
}
访问修饰符 返回值类型 函数名2 (参数类型 参数名,...){
//调用函数1
函数名1(参数类型 参数名,...);
}
3、递归调用的简单应用
案例:计算5以内的累加值
传统实现方式:
public int sum(int num){
int count=0;//记录累加的值
//循环 从1到5
for(int i=1;i<=num;i++){
count = count + i;//累加值计算
}
return count;//返回累加的值
}
递归实现方式:
public int sum(int num){
if(num==1){
return 1;
}
//当前函数调用自己
return num + sum(num-1);
}
4、递归调用的原理
直接递归:函数自己调用自己
public int sum(int num){
if(num==1){
return 1;
}
//当前函数调用自己
return num + sum(num-1);
}
5、递归调用的案例
案例:获取目录下所有的.jpg图片文件
package com.itheima.recursion;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class FileUtils {
// 创建List集合对象,存储所有的.jpg文件对象
private List<File> jpgList = new ArrayList<>();
//返回存储.jps文件的集合对象
public List<File> getJpgList() {
return jpgList;
}
//根据指定目录,获取该目录下所有的.jpg文件(含子目录)
public void getJpgFiles(File dir){
if(!dir.exists()){
throw new RuntimeException("目录不存在!");
}
//获取指定目录下所有的文件对象
File[] files = dir.listFiles();
//遍历文件对象数组
for(File file : files){
//判断文件对象是文件还是文件夹
if(file.isFile()){//是文件
//判断是否为.jpg文件
if(file.getName().toLowerCase().endsWith(".jpg")){
//把.jpg文件对象存储到集合中
jpgList.add(file);
}
}else if(file.isDirectory()){//是文件夹
//递归调用 getJpgFiles方法
getJpgFiles(file);//把文件夹对象作为参数传递
}
}
}
}
测试:
package com.itheima.recursion;
import java.io.File;
import java.util.List;
/**
* 测试递归的调用
*
* @author 上海校区-唐文杰
*
*/
public class RecursionTest {
public static void main(String[] args) {
//创建FileUtils对象
FileUtils f = new FileUtils();
//调用方法,获取d:\io目录下所有的.jpg文件
f.getJpgFiles(new File("d:\\io"));
List<File> jpgList=f.getJpgList();//获取到存储.jpg文件的集合
//遍历集合
for (File jpg : jpgList) {
System.out.println(jpg);
}
}
}
运行结果:
d:\io\file1\美女1.jpg
d:\io\file1\美女2.jpg
d:\io\file2\img\程序猿.jpg
d:\io\file2\img\黑马.jpg
d:\io\file2\大海.jpg
d:\io\file2\植物.jpg
d:\io\file2\车.jpg
d:\io\动物.jpg
d:\io\妖.jpg
|
|