递归

本文介绍了递归的概念,通过一个实例展示了如何在Java中使用递归遍历目录,找到所有.java结尾的文件并打印它们的绝对路径。递归条件包括定义方法、存在出口条件和寻找规律。代码示例详细解释了递归在文件系统操作中的应用。

递归

递归是方法本身调用方法的一种现象

Math类中有一个方法max()求最大值

1.方法嵌套不属于递归

Math.max(Math.max(10,20),30):方法嵌套

2.方法递归的条件:

1)必须定义方法

2)要有出口条件

3)寻找规律

3.递归可以用在构造方法上,但不能用在成员方法上

举例:

package digui;
/*
 * 求5的阶乘
 * 5!=5*4*3*2*1
 * 5!=5*4!
 * 方式一:for循环
 * 方式二:递归
 */
public class DiGuiDemo {
	public static void main(String[] args) {
		//for循环
		int jc=1;
		for(int x=5;x>0;x--){
			jc*=x;
		}
		System.out.println("5的阶乘是:"+jc);
		System.out.println("--------------");
		System.out.println(jieCheng(5));
        				
	}
	//递归
	//1)定义一个方法
	private static int jieCheng(int n) {
		//出口条件
		if(n==1){
			return 1;
		}else{
			return n*jieCheng(n-1);
		}
		
	}
}

4.练习,子生孙孙生子

package digui;
/*
 *  有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后
 * 		每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?(不死神兔)
 * 分析:找兔子对数的规律:
 * 兔子生长分三个周期,
 *          幼年,青年,老年              共计
 * 第1月                1   0    0       1
 * 第2月                0   1    0       1
 * 第3月                1   0    1       2
 * 第4月                1   1    1       3
 * 第5月                2   1    2       5
 * 第6月                3   2    3       8
 * 第7月                5   3    5       13
 * 第8月                8    5   8       21
 * 兔子的总数分别为1,1,2,3,5,8,13,21.......
 * 即从第三个月起,后面的兔子总数都等于前面两个月的兔子总数之和
 */
public class DiGuiDemo2 {
	public static void main(String[] args) {
		//方法一:for循环
		//定义一个数组
		int[] arr=new int[20];
		arr[0]=1;
		arr[1]=1;
		for(int x=2;x<arr.length;x++){
			arr[x]=arr[x-1]+arr[x-2];
			System.out.println("第"+x+"个月的兔子对数是:"+arr[x]);
		}
		System.out.println("------");
		   System.out.println(fanZhi(20));
	}
		//方法二:递归

	private static int fanZhi(int n) {
		if(n==1||n==2){
			return 1;
		}else{
				return fanZhi(n-1)+fanZhi(n-2);	
		}
	}
}


 

5.递归删除带目录的内容

import java.io.FileWriter;
import java.io.IOException;

/*
 * 删除Demo文件夹下带内容的目录
 * 1)将Demo文件封装成一个File对象
 * 2)采用递归删除,定义一个方法
 * 3)获取当前目录下所有的文件以及文件夹的File数组
 * 4)给File数组做非空判断
 * 遍历file数组,获取到每一个file对象
 * 判断是否是文件夹,是,返回2)继续删除,不是,直接删除
 * 
 */
public class DiGuiDemo3 {
	public static void main(String[] args) throws IOException {
		File file=new File("Demo\\aaa\\bbb");
		file.mkdirs();
		File file2=new File(file,"a.txt");
		file2.createNewFile();
		BufferedWriter bw=new BufferedWriter(new FileWriter(file2));
		bw.write("this is a txt");
		bw.flush();
		bw.close();
		File scrfile =new File("Demo");
		delete(scrfile);
	}

	private static void delete(File scrfile) {
		// TODO Auto-generated method stub
		//获取Demo文件夹下的所有文件以及文件夹的File数组
		File[]arrfile=scrfile.listFiles();
		for(File f:arrfile){
			//判断是否是文件夹
			if(f.isDirectory()){
				//是,继续返回去删除
				delete(f);
			}else{
				//否则直接删除文件
				System.out.println(f.getName()+","+f.delete());
			}
		}
		
	}
}

6.递归输出绝对路径

* 需求:把d:\develop目录下所有的java结尾的文件的绝对路径给输出在控制台。
 * 1)封装目录
 * 2)递归,定义一个方法,获取当前目录下的所有文件以及文件夹的File数组
 * 3)对File数组做非空判断
 * 4)增强for遍历,获取到每一个file对象
 * 判断是否是一个文件夹
 * 是:返回,继续回到2)
 * 不是:
 * 判断文件是否以.java结尾
 * 是:直接输出
 * 不是,不搭理
 */
public class DiGuiDemo4 {
	public static void main(String[] args) {
		File scrFoler=new File("d:\\develop");
		getAllFile(scrFoler);	
	}
	private static void getAllFile(File scrFoler) {
		File[]arrayFile=scrFoler.listFiles();
		if(arrayFile!=null){
			for(File f:arrayFile){
				if(f.isDirectory()){
					getAllFile(f);
				}else{
					if(f.getName().endsWith(".java")){
						System.out.println(f.getAbsolutePath());
					}
				}
			}
		}
	}
}


内容概要:本文详细介绍了一个基于MATLAB实现的线性回归(LR)电力负荷预测项目实例,涵盖了从项目背景、模型架构、算法流程、代码实现到GUI界面设计的完整开发过程。项目通过整合历史负荷、气象数据、节假日信息等多源变量,构建多元线性回归模型,并结合特征工程、数据预处理、正则化方法(如岭回归、LASSO)和模型评估指标(RMSE、MAPE、R²等),提升预测精度与泛化能力。文中还展示了系统化的项目目录结构、自动化部署脚本、可视化分析及工程集成方案,支持批量预测与实时滚动更新,具备高度模块化、可解释性强、部署友好的特点。; 适合人群:具备一定MATLAB编程基础,从事电力系统分析、能源管理、智能电网或数据建模相关工作的工程师、研究人员及高校师生。; 使用场景及目标:①应用于城市电力调度、新能源消纳、智能楼宇用能管理等场景下的短期负荷预测;②帮助理解线性回归在实际工程项目中的建模流程、特征处理与模型优化方法;③通过GUI界面实现交互式预测与结果可视化,支持工程落地与决策辅助; 阅读建议:建议结合提供的完整代码与GUI示例进行实践操作,重点关注数据预处理、特征构造、正则化调优与模型评估部分,深入理解各模块的设计逻辑与工程封装思路,以便迁移到类似的时间序列预测任务中。
【轴承故障诊断】基于SE-TCN和SE-TCN-SVM西储大学轴承故障诊断研究(Matlab代码实现)内容概要:本文介绍了基于SE-TCN(Squeeze-and-Excitation Temporal Convolutional Network)和SE-TCN-SVM的轴承故障诊断方法研究,重点针对西储大学(Case Western Reserve University, CWRU)的轴承数据集进行实验验证。研究通过构建SE-TCN模型提取振动信号中的深层时序特征,并利用SE模块增强关键特征通道的权重,从而提升故障识别精度。为进一步提高分类性能,还将SE-TCN提取的特征输入支持向量机(SVM)进行分类,形成SE-TCN-SVM混合模型。文中提供了完整的Matlab代码实现,便于复现实验结果。该方法在多工况、多故障类型下表现出良好的诊断准确率和鲁棒性,适用于工业设备的智能运维与早期故障预警。; 适合人群:具备一定信号处理和机器学习基础的研究生、科研人员及工程技术人员,尤其适合从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究人员;熟悉Matlab编程者更易上手。; 使用场景及目标:①应用于旋转机械设备(如电机、风机、齿轮箱等)的轴承故障诊断;②作为深度学习与传统分类器结合的典型案例,用于教学与科研参考;③目标是提升故障诊断的自动化水平与准确性,推动智能制造与预测性维护的发展。; 阅读建议:建议读者结合提供的Matlab代码,逐步运行并理解模型构建、特征提取与分类流程,同时尝试在其他公开数据集上迁移应用,以加深对SE-TCN架构与故障诊断流程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值