采用递归方法实现不死兔子问题和获取一个目录下的所有文件

1,不死兔子问题

1,问题描述

起初有一只兔子,兔子在第三个月成年并每个月能生出一只兔子,求第n个月里有多少只兔子。

2,解决方法

        第一个月 1只 ,第二个月 1只, 第三个月2只,第四个月3只,第四个月5只,第五个月8只,如此递推。根据问题描述我们可以想到,从第三个月开始,往前递推前两个月,这个月份里的兔子是一定能够生兔子的,因此我们可以得出在第n-2个月里的兔子数量是出生的兔子的数量,而在第n-1个月里的兔子的数量是已经存在的兔子的数量,所以在第n个月里兔子的数量就是前两个月的兔子数量之和。

了解了如何计算兔子数量之后,则要思考如何进行代码实现,在此采用递归的方法,使用定义数组和定义一个方法函数两种方式进行实现。

3,代码实现

3.1 采用数组定义的方式

若求20天时,有多少只兔子,根据上述思路,定义一个长度为20的数组,并且给数组下标为0,1的数组赋值为1。

 public static void main(String[] args) {
        int[] arr=new int[20];
        arr[0]=1;//存储第一个月兔子数量
        arr[1]=1;//存储第二个月兔子数量
        for(int i=2;i<arr.length;i++){
            arr[i]=arr[i-1]+arr[i-2];
        }
        System.out.println(arr[19]);
        
    }

结果为:6765

这样做的缺点是灵活性太差,在求不同的月份的兔子时需要修改代码。

3.2 采用递归函数的方法

直接上代码:

public static void main(String[] args) {    
        Scanner sc=new Scanner(System.in);  
        System.out.println("请输入n");
        int n=sc.nextInt();
        System.out.println(f(n));
    }
    /*定义一个方法f(n)*/
    public static  int f(int n){
        if(n==1||n==2){  //在前两个月兔子的数量都是1
            return 1;
        }else
        {
            return  f(n-1)+f(n-2);
        }
    }

输出为:6765

2,获取一个目录下的所有文件

/*
        思路:
1,根据给定的路径创建一个File对象
2,定义一个方法,用于获取给定目录下的所有内容,参数为第一步创建的File对象
3,获取给定的File目录下所有文件或者目录的File数组
4,遍历该File数组,得到每一个File对象
5,判断该File对象是否是目录
是:递归调用
不是:获取绝对路径输出在控制台
6,调用方法
*/
public static void main(String[] args) {
   
        GetAllTargetFile("E:\\anzhuorenwu");

    }
    public static void GetAllTargetFile(String TargetURL){
        File file = new File(TargetURL);
        File[] files = file.listFiles();
        if(files!=null){
            for(File f:files){
            if(f.isFile()){
                System.out.println(f.getAbsolutePath());
            }else{
                GetAllTargetFile(f.getAbsolutePath());
            }
        }
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值