javaW2D5-递归和斗地主排序

递归

递归 在当前方法内调用的行为称之为递归
直接递归
当前方法内调用自身
间接递归
方法a调用方法b,方法b在调动方法c
注意
在递归中一定要有条件限定,有了条件限定就可以保证我们的递归可以结束,否则就会造成栈内存溢出

再有了条件限定之后,也要注意,递归次数不能太多,否则就会造成栈内存溢出

累加案例

计算1-5的和
分析:和=n+n-1

public class Demo2 {
    public static void main(String[] args) {
        int num=5;
        int sum=getSum(num);
        System.out.println(sum);
    }

    private static int getSum(int num) {
        if(num==1){
        return 1;
       }
    return num+getSum(num-1);
    }
}

阶乘案例

计算1-5的累乘

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

        System.out.println(a(5));
    }

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

递归打印多级目录

import java.io.File;

public class Demo4 {
    public static void main(String[] args) {
        String a="E:\\java\\java11\\java1";
        File file=new File(a);
        printDir(file);
    }

    private static void printDir(File file) {

        //list(); String[]  listFile ();File[]
    File[]files=file.listFiles();
        for (File file1 : files) {
            if(file1.isFile()){

                if(file1.getName().endsWith(".java")){
                    System.out.println("java文件名:"+file1.getAbsolutePath());
                }

            }
            else if(file1.isDirectory()){
                
                printDir(file1);
            }
        }
    }
}

斗地主升级排序

import java.util.*;

public class Demo5 {
    public static void main(String[] args) {
        //创建扑克牌
        //map集合存储
        HashMap<Integer,String>map=new HashMap<>();
        ArrayList<String>colors=new ArrayList<>();
        ArrayList<String>num=new ArrayList<>();
        Collections.addAll(colors,"红桃","黑桃","梅花","方片");
        Collections.addAll(num,"2","A","K","Q","J","10","9","8","7","6","5","4","3");
        int count=0;
        map.put(count++,"大王");
        map.put(count++,"小王");

        for (String s : num) {
            for (String color : colors) {
                String card=color+s;
                map.put(count++,card);

            }


        }
        Set<Integer>set=map.keySet();
        ArrayList<Integer>list=new ArrayList<>();
        list.addAll(set);
        Collections.shuffle(list);//打乱顺序
        //发牌
        ArrayList<Integer>player1=new ArrayList<>();
        ArrayList<Integer>player2=new ArrayList<>();
        ArrayList<Integer>player3=new ArrayList<>();
        ArrayList<Integer>save=new ArrayList<>();
        for(int i=0;i<list.size();i++){
            Integer a=list.get(i);
            if(i>=51){
                save.add(a);
            }
            else if(i%3==0){
                player1.add(a);
            }
            else if(i%3==1){
                player2.add(a);
            }
            else if(i%3==2){
                player3.add(a);
            }
        }
        /*System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(save);*/
        System.out.println("===================================");
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        /*System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(save);*/
        ArrayList<String>Play1=new ArrayList<>();
        ArrayList<String>Play2=new ArrayList<>();
        ArrayList<String>Play3=new ArrayList<>();
        ArrayList<String>Save=new ArrayList<>();
        for (Integer s : player1) {
            String Card=map.get(s);
            Play1.add(Card);

        }
        for (Integer s : player2) {
            String Card=map.get(s);
            Play2.add(Card);

        }
        for (Integer s : player3) {
            String Card=map.get(s);
            Play3.add(Card);

        }
        for (Integer s : save) {
            String Card=map.get(s);
            Save.add(Card);

        }
        System.out.println(Play1);
        System.out.println(Play2);
        System.out.println(Play3);
        System.out.println(Save);



    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值