1.什么是方法递归?
答:方法自己调用自己。
2.递归存在的问题?
答:如果没有控制好终止,会出现栈溢出 。
3.递归能干嘛?
答:在开发中用的比较少,一般都能用for语句就可以来完成了。这属于可以不用,但是不能不会的一种方法。
例子:
1.计算阶乘(例如计算5的阶层就是1*2*3*4*5)
思路理解:比如计算5的阶层就是4组乘法,把最高阶逐第五组5渐往下寻找到最小值1。然后1*2得出的数字再传递去*3,继续传上去直到最高阶5就可以计算出来了。
- package bao;
- public class Test {
- public static void main(String[] args) {
- //调用返回的f方法
- System.out.println("运行结果为:"+f(5));
- }
- //计算阶层方法
- public static int f(int n){
- //判断阶层n是否为1
- if (n == 1){
- return n;
- }//层层递归到最小值1再来计算
- else {
- return f(n-1)*n;
- }
- }
- }
运行结果:
运行结果为:120
2.文件搜索(找到后还能打开指定的文件)
以打开QQ为例子(多练习就可以记住了)
- package bao;
-
- import java.io.File;
- import java.io.IOException;
-
- public class Test {
- public static void main(String[] args) {
- //一、2.传入盘符文件和要搜索指定的文件名称
- searchFile(new File("D:\\"),"QQ.exe");
- System.out.println();
- }
- //一、1.创建一个要搜索文件的对象
- public static void searchFile(File dir,String fileName){
- //一、3.判断dir是否是目录
- if (dir!=null&& dir.isDirectory()){
- //二、可以找了
- //二、1提取当前目录下的一级文件
- File[] f = dir.listFiles();
- //二、2.判断一遍文件夹里面有没有东西才继续遍历
- if (f!=null&&f.length>0){
- //正式遍历
- for (File file : f) {
- //二、3判断里面文件还是文件夹
- if (file.isFile()){
- //是文件,输出
- if (file.getName().contains(fileName)){
- System.out.println("找到了"+file.getAbsolutePath());
- //三、附带技能,启动,出现异常抛出捕捉就好
- Runtime r = Runtime.getRuntime();
- try {
- r.exec(file.getAbsolutePath());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- }else {
- //是文件夹,递归寻找(调用自己再循环来一次)
- searchFile(file ,fileName);
- }
- }
- }
- }else {
- System.out.println("当前搜索的不是文件夹,不支持!");
- }
- }
- }
运行结果:
找到了D:\软件安装\QQ\Bin\QQ.exe

旁白:
1. 这个方法递归主要的就是用来计算遍历的,和算法有关。开发中用到并不多。优点就是相同重复方法的一直检索可以用这个,阶乘计算等。
2.还能用来检索文件夹里面的文件位置在哪里,也可以打开文件。