0%

递归

什么是递归

指在当前方法内调用自己的这种现象。

调用时,要有一个退出的条件,否则会死循环。

计算1~n的和

1到3的和:1 + 2 + 3。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
3
4
5
当位数为12时,当前返回的值应该是1
当位数为3时,返回值应该 =2=1+1
当位数为4时,返回值 =3=2+1
当位数为5时,返回值 =5=3+2
大于等于3的情况下,当前位数(n)的数值 =f(n-1)+f(n-2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
}
}
}
↓赏一个鸡腿... 要不,半个也行↓