递归
递归 在当前方法内调用的行为称之为递归
直接递归
当前方法内调用自身
间接递归
方法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);
}
}