当前位置: 移动技术网 > IT编程>开发语言>Java > java进阶

java进阶

2020年11月12日  | 移动技术网IT编程  | 我要评论
递归练习练习一使用递归计算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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网