递归~~!

文章介绍了递归的概念,包括直接和间接递归,并通过一个计算阶乘的例子进行说明。接着,展示了如何使用递归实现文件系统中特定文件的查找功能。最后,文章提出了一个‘啤酒问题’,并用递归来解决如何用钱购买尽可能多的啤酒和瓶盖。
摘要由CSDN通过智能技术生成

定义

方法直接调用自己或者间接调用自己的形式称为方法递归
间接递归:就是方法调用其他方法,其他方法又回调方法自己
**递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出现象 **
一个简简单单的n的阶乘

public class Test {
    public static void main(String[] args) {

        int a = 10;
        System.out.println(JieCheng(a));


    }

    private static int JieCheng(int a) {
        if (a==1){
            return 1;
        }
        return a*JieCheng(a-1);
    }
}

因此,递归有三要素:
在这里插入图片描述

非规律化递归问题

文件搜索

递归实现文件夹查找具体文件

public class Test {
    public static void main(String[] args) {
        File file = new File("E:\\NWPU VHR-10\\UCAS_AOD");
        System.out.println(file.getName());
        searchFile(file,"P0001.png");
    }

    public static void searchFile(File file,String fileName){
        File[] files = file.listFiles();
        for (File file1:files){
            if (file1.isDirectory()&&file1.list().length==0){
                break;
            }
            if (file1.isDirectory()){
                searchFile(file1,fileName);
            }else if (file1.isFile()){
                if (fileName.equals(file1.getName().split("\\\\")[file1.getName().split("\\\\").length-1])){
                    System.out.println("找到了此文件"+file1.getAbsolutePath());
                    return;
                }
            }
        }
    }
}

啤酒问题

在这里插入图片描述

public class Beer {

    public static int beerNumb;
    public static int bottleCap;
    public static int bottle;

    public static void main(String[] args) {
        buy(10);
        System.out.println(beerNumb+"  "+bottleCap+ "   "+bottle);

    }

    public static  void buy(int money){
        beerNumb = money/2;
        bottleCap = money/2;
        bottle = money/2;
        exchange2(bottle);
        exchange4(bottleCap);
    }

    public static void exchange4(int numb4){
        if (numb4<4){
            return;
        }
        beerNumb= beerNumb+numb4/4;
        bottle = bottle+numb4/4;
        bottleCap = bottleCap - 4*(numb4/4)+numb4/4;
        exchange2(bottle);
        exchange4(bottleCap);
    }

    public static void exchange2(int numb2){
        if (numb2<2){
            return;
        }
        beerNumb= beerNumb+numb2/2;
        bottleCap = bottleCap+numb2/2;
        bottle = bottle-2*(numb2/2)+numb2/2;
        exchange2(bottle);
        exchange4(bottleCap);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值