递归的形式和特点

package com.key.d2_recusion;public class RecusionDemo1 {public static void main(String[] args) {}public static void test(){System.out.println("========test被执行========");test(); //方法递归,直接递归形式}/*间接递归*/public static void test1(){System.out.println("========test1被执行========");test2();}public static void test2(){System.out.println("========test2被执行========");test1();}}
递归的算法流程、核心要素
递归算法案例1:计算1-n的阶乘结果,使用递归的思想解决,阶乘公式:f(n)=1234…(n-1)*n
package com.key.d2_recusion;public class RecusionDemo2 {public static void main(String[] args) {System.out.println(method1(3));}public static int method1(int n){if (n == 1){return 1;}else {return method1(n-1) * n;}}}
递归三要素:
递归的经典问题
猴子吃桃问题

package com.key.d2_recusion;public class RecusionDemo3 {public static void main(String[] args) {System.out.println(sum(10));}public static int sum(int n){if (n == 1){return 1;}else {return (sum(n-1)+1)*2;}}}

非规律化递归问题
查找计算机中的文件,类似于搜索器

package com.key.d2_recusion;import java.io.File;/*实现搜索文件功能,/Users/p0wer_shell/Desktop/图片/123.txt*/public class RecusionDemo4 {public static void main(String[] args) {//2、传入目录和文件名File dir_path = new File("/Users/p0wer_shell/Desktop/");String file_name = "123.txt";searchFile(dir_path,file_name);}/*** 1、搜索某个目录下的全部文件,找到我们想要的文件* @param dir 被搜索的源目录,在哪个目录下搜索* @param fileName 要搜索的文件名*/public static void searchFile(File dir,String fileName){//3、判断dir是否是目录if (dir.isDirectory() && dir != null){//4、提取当前目录下的一级文件对象File[] files = dir.listFiles();//5、判断是否存在一级对象,如果存在才能遍历if (files != null && files.length > 0){for (File file : files) {//6、判断当前遍历的是文件夹还是文件if (file.isFile()){//7、是不是我们要找的文件,如果是就输出他的路径if (file.getName().contains(fileName)){ //判断文件名是否包含我们要找的关键字System.out.println(file.getAbsolutePath());}}else {//8、匹配的是文件夹,需要继续找文件,这里可以用递归的方法searchFile(file,fileName);}}}}else {System.out.println("当前输入有误,请输出文件夹...");}}}

