什么是递归
指在当前方法内调用自己的这种现象。
调用时,要有一个退出的条件,否则会死循环。
计算1~n的和
1到3的和:1 + 2 + 3。
public static void main(String[] args) { int num = 3; // 调用求和的方法 int sum = getSum(num); //输出结果 System.out.println(sum); } private static int getSum(int num) { /* num 为1时 返回1 相当于函数的出口 * */ if (num == 1){ return 1; } /* 不为1时, 返回num和num-1的累加和 递归调用getSum * */ return num + getSum(num-1); }
递归求阶乘
10的阶乘10!
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
public static void main(String[] args) { int num = 4; // 调用求和的方法 int sum = getJieCheng(num); //输出结果 System.out.println(sum); } private static int getJieCheng(int num) { /* num 为1时 返回1 相当于函数的出口 * */ if (num == 1){ return 1; } /* 不为1时, 返回num和num-1的累加和 递归调用getSum * */ return num * getJieCheng(num-1); }
斐波那契数列
# 什么是斐波那契数列
又称黄金分割数列、因数学家列昂纳多 · 斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为 “兔子数列”
指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
# 求数列的第6位的值是多少
递归分析
当位数为1和2时,当前返回的值应该是1; 当位数为3时,返回值应该 =2=1+1; 当位数为4时,返回值 =3=2+1; 当位数为5时,返回值 =5=3+2; 大于等于3的情况下,当前位数(n)的数值 =f(n-1)+f(n-2)
public static void main(String[] args) { int f = f(3); System.out.println(f); //数列:1,1,2,3,5,8...... for (int i = 1; i <= 15; i++) { //输出15个斐波那契数列 System.out.print(f(i) + "\t"); } } public static int f(int n) { if (n == 1 || n == 2) return 1; else return f(n - 1) + f(n - 2); }
文件搜索
搜索指定目录下指定扩展名的文件,例如:D盘下 aaa目录中所有的 .txt文件
public static void printDir(File dir) { // 获取子文件和目录 File[] files = dir.listFiles(); // 循环打印 for (File file : files) { if (file.isFile()) { // 是文件,判断文件名并输出文件绝对路径 if (file.getName().endsWith(".txt")) { System.out.println("文件名:" + file.getAbsolutePath()); } } else { // 是目录,继续遍历,形成递归 printDir(file); } } }