递归概念
递归概述
以编程的角度来看,递归指的是方法定义中调用方法本身的现象
递归解决问题的思路
- 把一个复杂的问题层层转化成为一个与原问题相似的规模较小的问题来求解
- 递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算
递归解决问题需要找到两个内容
- 递归出口:否则会出现内存溢出
- 递归规则:与原问题相似的规模较小的问题
递归的程序实现
Java递归实现斐波那契数列
斐波那契数列是什么?https://baike.baidu.com/item/斐波那契数列/99145?fr=aladdin
public class Fibonacci {
public static void main(String[] args) {
// 输出第20个数
System.out.println(f(20));
}
public static int f(int n) {
// 递归出口
if (n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2);
}
}
}
Java递归实现求阶乘
public class Factorial {
public static void main(String[] args) {
// 5的阶乘
System.out.println(factorial(5));
// 10的阶乘
System.out.println(factorial(10));
}
public static int factorial(int n) {
// 递归出口
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
}
Java递归实现遍历任意文件夹中的文件
import java.io.File;
import java.util.Scanner;
public class GetPath {
public static void main(String[] args) {
// 键盘接受需要遍历的文件夹
Scanner sc = new Scanner(System.in);
System.out.println("请输出要遍历的文件路径(例如:C:\\Users):");
String path = sc.nextLine();
// 可直接将path替换文件制定的文件加路径来遍历指定路径下的所有文件
File file = new File(path);
// 调用文件遍历方法
getFilePath(file);
}
// 方法:循环遍历文件夹,输出所有其中的所有文件
public static void getFilePath(File srcFile){
File[] fileArray = srcFile.listFiles();
if(fileArray != null){
for(File file : fileArray){
if(file.isDirectory()){
getFilePath(file);
}else {
// 递归出口
System.out.println(file.getAbsoluteFile());
}
}
}
}
}