1. 递归的概念
递归:指在当前方法内调用自己的这种现象。
递归的分类:
- 递归分为两种,直接递归和间接递归。
- 直接递归称为方法自身调用自己
- 间接递归可以A方法调用B方法, B方法调用C方法, C方法调用A方法。
注意事项:
- 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
- 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
- 构造方法,禁止递归
2. 递归的练习
- 求前n项的和
package cn.itcast.day13.demo02;
import java.util.Scanner;
public class Recursion01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入n:");
int sum = sum(sc.nextInt());
System.out.print("结果是:" + sum);
}
public static int sum(int n){
if(n == 1) return 1;
return n + sum(n - 1);
}
}
执行结果
请输入n:100
结果是:5050
- 使用递归求n的阶乘
package cn.itcast.day13.demo02;
import java.util.Scanner;
public class Recursion02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入n:");
int sum = sum(sc.nextInt());
System.out.println("结果是:" + sum);
}
public static int sum(int n){
if (n == 1 ) return 1;
return n * sum(n-1);
}
}
执行结果
请输入n:
5
结果是:120
- 递归打印多久目录
package cn.itcast.day13.demo02;
import java.io.File;
public class RecursionFile {
public static void main(String[] args) {
File file = new File("C:\\Users\\x\\Desktop\\All of D\\java代码");
getAllFile(file);
}
public static void getAllFile(File dir){
System.out.println(dir);
File[] files = dir.listFiles();
for(File f : files){
if(f.isDirectory()){
getAllFile(f);
}else{
System.out.println(f);
}
}
}
}
- 文件搜索
package cn.itcast.day13.demo02;
import java.io.File;
public class RecursionFile2 {
public static void main(String[] args) {
File file = new File("C:\\Users\\x\\Desktop\\All of D\\考试2");
getAllFile(file);
}
public static void getAllFile(File dir){
// System.out.println(dir);
File[] files = dir.listFiles();
for(File f : files){
if(f.isDirectory()){
getAllFile(f);
}else{
/*
只要.java结尾的文件
1.把File对象f,转为字符串对象
2..调用String类中的方法endsWi th判断字符串是否是以. java结尾
*/
if(f.getName().toLowerCase().endsWith(".txt")){
System.out.println(f);
}
}
}
}
}
执行结果
C:\Users\x\Desktop\All of D\考试2\a.txt
C:\Users\x\Desktop\All of D\考试2\b.TXT
ss