欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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