目录
1.递归
程序中的递归: 方法自己调用自己
注意:
1.递归一定要有出口,否则会报栈内存溢出错误StackOverflowError
2.递归的出口不能太晚,否则会报栈内存溢出错误StackOverflowError
package com.jcli;
/**
* 递归
*/
public class Test07 {
static int count = 0;
public static void main(String[] args) {
/*
程序中的递归: 方法自己调用自己
注意:
1.递归一定要有出口,否则会报栈内存溢出错误StackOverflowError
2.递归的出口不能太晚,否则会报栈内存溢出错误StackOverflowError
*/
method();
}
private static void method() {
count++;
if (count == 100) {
return;
}
System.out.println("HelloWorld:" + count);
method();
}
}
Exception in thread "main" java.lang.StackOverflowError
2.递归累和
-
定义一个方法,使用递归计算1 ~ n的累加和
分析
-
定义一个方法
-
什么时候开始递归---->找规律
-
规律:
-
1的累加和 = 1
-
2的累加和 = 2 + 1
-
3的累加和 = 3 + 2 + 1
-
4的累加和 = 4 + 3 + 2 + 1
-
5的累加和 = 5 + 4 + 3 + 2 + 1
-
...
-
n的累加和 = n + (n-1)的累加和
-
-
-
什么时候结束递归
-
计算到1的累加和就结束递归
-
package com.jcli;
/**
*递归累和
*/
public class Test08 {
public static void main(String[] args) {
System.out.println(getSum(6));//21
}
/**
*递归计算1 ~ n的累加和
* @param i
* @return
*/
private static int getSum(int i) {
// 出口
if (i == 1) {
return 1;
}
// 规律
return i + getSum(i - 1);
}
}
3.递归求阶乘
-
计算n的阶乘
分析
阶乘:所有小于及等于该数的正整数的积。
n的阶乘:n! = n * (n-1) *...* 3 * 2 * 1
n的阶乘= n * (n - 1)的阶乘,所以可以把阶乘的操作定义成一个方法,递归调用。
推理得出:n! = n * (n-1)!
package com.jcli;
/**
* 递归求阶乘
*/
public class Test09 {
public static void main(String[] args) {
System.out.println(jieCheng(6));//720
}
/**
* 计算n的阶乘
* @param i
* @return
*/
private static int jieCheng(int i) {
//出口
if(i==1){
return 1;
}
//规律
return i*jieCheng(i-1);
}
}
4.文件搜索
输出day10目录中的所有.java文件的绝对路径
分析
-
定义一个方法,使用递归完成查找
-
获取该文件夹路径下的所有子文件和子文件夹
-
循环遍历所有的子文件和子文件夹
-
判断遍历出来的是否是文件,并且是否是.java结尾的文件,如果是,就打印输出
-
判断遍历出来的是否是文件夹,如果是递归
package com.jcli; import java.io.File; /** * 文件搜索 */ public class Test10 { public static void main(String[] args) { //输出demo0319目录中的所有.java文件的绝对路径。 //File f1 = new File("demo0319"); File f1 = new File("D:\\jclicode\\03\\18\\demo0319"); searchJavaFile(f1); } //1. 定义一个方法,使用递归完成查找 private static void searchJavaFile(File dirPath) { //2. 获取该文件夹路径下的所有子文件和子文件夹 File[] arr = dirPath.listFiles(); //3. 循环遍历所有的子文件和子文件夹 if (arr != null) { for (File file : arr) { //4. 判断遍历出来的是否是文件,并且是否是.java结尾的文件,如果是,就打印输出 if (file.isFile() && file.getName().endsWith(".java")) { System.out.println("file:" + file.getAbsolutePath()); } //5. 判断遍历出来的是否是文件夹,如果是递归 if (file.isDirectory()) { searchJavaFile(file); } } } } }