开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
前言
递归常用于实现查找功能实现,下面通过3个递归案例,来学习一下递归思想在Java中的应用。
一、递归
递归:指在当前方法内调用自己的这种现象。
public static void a(){\ a();\ }
二、递归案例
2.1 递归求累加和
- 需求:计算1 ~ n的和 【num的累加和 = num + (num-1)的累加和,所以可以把累加和的操作定义成一个方法,递归调用。
- 分析:假设n的值为10,1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 [10的累加和] ====>>> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 [9的累加和] + 10
- 代码实现:
public class Test { public static void main(String[] args) { System.out.println(getSum(10)); } // 递归求n的累加和 public static int getSum(int n) { // 给定一个结束条件 if (n == 1) { return 1; } // n的累加和等价于 n + (n-1)的累加和 return n + getSum(n - 1); } // 之前的思路,for循环求n的累加和 public static int getSumFromFori(int n) { int sum = 0; for (int i = 0; i <= n; i++) { sum += i; } return sum; } }
2.2 练习(递归求阶乘)
需求:求n的阶乘!
6的阶乘: 6 * 5 * 4 * 3 * 2 * 1
5的阶乘: 5 * 4 * 3 * 2 * 1
n的阶乘:n * (n-1)的阶乘!\
public class Test { public static void main(String[] args) { System.out.println(jieCheng(6)); } public static int jieCheng(int n) { if (n == 1) { return 1; } return n * jieCheng(n - 1); } }
2.3 文件搜索
- 需求:搜索D:\Develop 目录中的.java 文件。\
- 分析:
D盘的Develop下面有很多内容:
要么是文件!(这个文件如果是以.java结尾的,那么就获得其路径)
要么是目录!
继续获得该目录下面所有的内容:
要么是文件!(这个文件如果是以.java结尾的,那么就获得其路径)
要么是目录!
继续获得该目录下面所有的内容:
要么是文件!(这个文件如果是以.java结尾的,那么就获得其路径)
要么是目录!
public class Test { public static void main(String[] args) { // 创建File对象 File file = new File("D:/Develop"); // 调用 searchJavaFile(file); } public static void searchJavaFile(File file) { // 判断 if (file.isDirectory()) { // 获得该目下所有的内容(可能是文件可能是目录),构成的数组 File[] files = file.listFiles(); // 遍历 for (File file1 : files) { // 判断 if (file1.isFile()) { // 文件! // 判断是否以.java结尾的文件 if (file1.getName().endsWith(".java")) { // 打印路径 System.out.println(file1.getAbsolutePath()); } } else {// 目录 // 递归调用 searchJavaFile(file1); } } } } }
后记
在日常的开发中,我们使用递归一定要有条件限定,保证递归能够停止下来,次数不要太多,否则会发生栈内存溢出。 喜欢我的文章的朋友点点喜欢、收藏,也欢迎朋友们评论区留下你的意见和建议,恕毅在此拜谢!