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.还能用来检索文件夹里面的文件位置在哪里,也可以打开文件。