递归算法及应用

递归是方法体内部调用方法自身的一种现象

1,  递归的次数不能太多,否则就会内存溢出
2, 构造方法不能递归
3, 递归需要在合适的时候结束,否则就是一个死递归
 如何定义一个递归?
     找到出口
     找到规律

两个经典算法:

1,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十个月的兔子对数为多少?

2,小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个。


1:规律:从第三个月开始的兔子对数=前两个月兔子对数之和
      出口:当是第一个月或者第二个月的时候返回1对兔子

     

	public static int test1(int month){
		if(month<=2)
		return 1;
		else
			return test1(month-2)+test1(month-1);
		
		
	}
2: 规律:前一天的桃子数=(后一天的桃子数+1)*2

       出口:第10天时,还剩1个桃子

	public static int test2(int day){
		if(day==10){
			return 1;
		}else{
			return (test2(day+1)+1)*2;
		}
	}
3:java中的应用

     a,递归查找一个目录下所有后缀是jpg的文件

     b,递归删除一个多层目录

     a

        1.将指定目录封装成一个File对象
        2.调用搜索指定后缀名文件的方法
        3.判断当前的文件是不是一个标准文件
            出口:如果是就直接判断后缀名是不是要求的后缀名,如果是要求的后缀名就直接输出
            如果不是一个标准的文件,直接开始第4步
        4.规律:获取文件夹底下所有子文件,然后再调用搜索指定后缀名文件的方法

	private static void searchFileName(File file, String name) {
		//3.判断当前的文件是不是一个标准文件
		if(file.isFile()){
			//出口:如果是就直接判断后缀名是不是要求的后缀名,如果是要求的后缀名就直接输出
			if(file.getName().endsWith(name)){
				System.out.println(file.getAbsolutePath());
			}
		}else{
			//如果不是一个标准的文件,直接开始第4步
			//4.规律:获取文件夹底下所有子文件,然后再调用搜索指定后缀名文件的方法
			File[] files = file.listFiles();
			for(File f : files){
				searchFileName(f, name);
			}
		}
	}
       b

        1.将删除的文件夹封装成File对象
        2.直接调用删除文件夹的方法
        3.判断当前的文件是不是一个标准的文件
            如果是就直接删除
            如果不是,继续第4步
        4.获取文件夹底下所有的子文件,然后遍历删除所有的子文件之后再删除当前的文件

	private static void deleteFolder(File file) {
		//3.判断当前的文件是不是一个标准的文件
		if(file.isFile()){
			//如果是就直接删除
			file.delete();
		}else{
			//如果不是,继续第4步
			//4.获取文件夹底下所有的子文件,然后遍历删除所有的子文件之后再删除当前的文件
			File[] files = file.listFiles();
			for(File childFile : files){
				//调用删除方法
				deleteFolder(childFile);
			}
			//删除自己,现在这个file就是一个空文件夹了
			file.delete();
		}
	}


 *以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,只剩下一个桃子了.问第一天猴子共摘多少个桃子?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值