java进阶
程序员文章站
2022-04-21 15:24:59
递归练习练习一使用递归计算1-n之间的和定义一个方法,使用递归计算1-n之间的和1+2+3+...+nn+(n-1)+(n-2)+...+1已知:最大值:n最小值:1使用递归必须明确:1. 递归的结束条件获取到1的时候结束 2. 递归的目的获取下一个被加的数字(n-1)public static void main(String[] args) {int s = sum(3);System.out.println(s);}public sta...
递归练习
- 练习一
使用递归计算1-n之间的和
定义一个方法,使用递归计算1-n之间的和
1+2+3+...+n
n+(n-1)+(n-2)+...+1
已知:
最大值:n
最小值:1
使用递归必须明确:
1. 递归的结束条件
获取到1的时候结束
2. 递归的目的
获取下一个被加的数字(n-1)
public static void main(String[] args) {
int s = sum(3);
System.out.println(s);
}
public static int sum(int n) {
if(n == 1) {
return 1;
}
return n + sum(n-1);
}
注意:
使用递归求和,main方法调用sum方法,sum方法会一直调用sum方法,导致在内存中有多个sum方法(频繁的创建方法,调用方法,销毁方法)效率低下
【所以如果仅仅是计算1-n之间的和,不推荐使用递归,使用for循环即可】
- 练习二
使用递归计算阶乘
n的阶乘:n! = n * (n-1) … 3 * 2 * 1
定义方法使用递归计算阶乘
5的阶乘:5! = 5*(5-1)*(5-2)*(5-3)*(5-4)=5*4*3*2*1
递归结束的条件:
获取到1的时候结束
递归的目的:
获取下一个被乘的数字(n-1)
方法的参数发生变化:
5,4,3,2,1
public static void main(String[] args) {
int jiecheng = jc(5);
System.out.println(jiecheng);
}
public static int jc(int n) {
if(n == 1){
return 1;
}
return n * jc(n-1);
}
- 练习三
递归打印多级目录
需求:
遍历D:\\abc文件夹,及abc文件夹的子文件夹
D:\\abc
D:\\abc\\abc.txt
D:\\abc\\abc.java
D:\\abc\\a
D:\\abc\\a.jpg
D:\\abc\\a.java
D:\\abc\\b
D:\\abc\\b.java
D:\\abc\\b.txt
定义一个方法,参数传递File类型的目录,方法中对目录进行遍历。
public static void main(String[] args) {
File file = new File("D:\\abc");
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); // f是一个文件夹,则继续遍历这个文件夹
}else{
System.out.println(f); // f是一个文件,直接打印即可
}
}
}
- 练习四
递归打印多级目录
需求:
遍历D:\\abc文件夹,及abc文件夹的子文件夹
【只要.java结尾的文件】
D:\\abc
D:\\abc\\abc.txt
D:\\abc\\abc.java
D:\\abc\\a
D:\\abc\\a.jpg
D:\\abc\\a.java
D:\\abc\\b
D:\\abc\\b.java
D:\\abc\\b.txt
定义一个方法,参数传递File类型的目录,方法中对目录进行遍历。
public static void main(String[] args) {
File file = new File("D:\\abc");
getAllFile(file);
}
public static void getAllFile(File dir){
File[] files = dir.listFiles();
for (File f : files) {
if(f.isDirectory()){
getAllFile(f); // f是一个文件夹,则继续遍历这个文件夹
}else{
// 只要.java结尾的文件
// 1. 把File对象f,转为字符串对象,有三种方式
String name = f.getName(); // abc.java
// String path = f.getPath();// D:\\abc\\abc.java
// String s = f.toString();// D:\\abc\\abc.java
// 把字符串,转换为小写
s = s.toLowerCase();
// 2. 调用String类中的方法endsWith判断字符串是否是以.java结尾
boolean b = s.endsWith(".java");
// 3. 如果是以.java结尾的文件,则输出
if(b){
System.out.println(f);
}
}
}
}
注意: // 链式编程
if(f.getName().toLowerCase().endsWith(".java")){
System.out.println(f);
}
本文地址:https://blog.csdn.net/weixin_42411963/article/details/109639179