java 递归编译_Java 递归的简单学习与理解

递归概述

概念:指在当前方法内调用自己的这种现象。

递归的分类:递归分为两种,直接递归和间接)递归。

直接递归称为方法自身调用自己

间接递归可以A方法调用B方法,B方法调用方法,C方法调用A方法。

注意事项:

递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出。

构造方法,禁止递归。

假如有方法A,没有限制,不断的递归A方法,那么分配的栈内存中就有无数个A方法,最终导致栈内存溢出。构造方法中不可以递归,因为构造方法是创建对象使用的,一直递归会导致内存中有无数多个对象,直接编译报错。

使用递归计算1~n之间的和

public classDemoSum {public static voidmain(String[] args) {

System.out.println(sum(100));

}public static int sum(intn) {if (n == 1) {return 1;

}return n + sum(n - 1);

}

}

控制台输出:5050

使用递归来计算n的阶乘

public classDemoFactorial {public static voidmain(String[] args) {

System.out.println(sum(10));

}public static int sum(intn) {if (n > 1) {return n * sum(n - 1);

}return 1;

}

}

控制台输出:3628800

递归打印多级目录下的文件

importjava.io.File;

public classDemoFileAndDirectory {public static voidmain(String[] args) {

File file= new File("/AAA/BBB/CCC/");

ergodic(file);

}/*** 遍历输出文件夹下的的文件,倘若给定的是一个文件,直接输出该文件

*@paramfile 文件或文件夹*/

public static voidergodic(File file) {//是否存在该目录或文件

if(file.exists()) {//存在该目录或文件,获取该目录下的所有目录和文件

File[] files =file.listFiles();//遍历该目录下的文件或目录

for(File f : files) {//该目录下,如果是目录,使用递归。如果是文件,直接输出。

if(f.isDirectory()) {

ergodic(f);

}else{

System.out.println(f.getAbsolutePath());

}

}

}else{if(file.isFile()) {

System.out.println("不存在该文件");

}else{

System.out.println("不存在该目录");

}

}

}

}

控制台输出:

不存在该目录

递归打印多级目录下的.java文件

importjava.io.File;public classDemo02FileAndDirectory {public static voidmain(String[] args) {

File file= new File("/Users/liyihua/IdeaProjects/Study/src/view/study");

ergodic(file);

}/*** 遍历输出文件夹下的的.java文件,倘若给定的是一个文件,且是.java为后缀的文件,直接输出该文件

*@paramfile 文件或文件夹*/

public static voidergodic(File file) {//是否存在该目录或文件

if(file.exists()) {//存在该目录或文件,获取该目录下的所有目录和文件

File[] files =file.listFiles();//遍历该目录下的文件或目录

assert files != null;for(File f : files) {//该目录下,如果是目录,使用递归。如果是文件,直接输出。

if(f.isDirectory()) {

ergodic(f);

}else if (f.getName().endsWith(".java")) {

System.out.println(f.getName());

}

}

}else{if(file.isFile()) {

System.out.println("不存在该文件");

}else{

System.out.println("不存在该目录");

}

}

}

}

控制台输出:

DemoLinkedHashMap.java

Demo01MapIteratorKey.java

Demo01MapKeySet.java

Demo01MapIteratorKeyValue.java

Demo01MapGet.java

Demo01MapRepeat.java

Demo01MapRemove.java

Demo01Map.java

DemoMapPut.java

MapRepeat.java

Demo02MapPut.java

DemoHashTable.java

Demo01MapEntrySet.java

Student.java

Demo01MapContainsKey.java

Demo01PathSeparator.java

Demo01File.java

Demo01FileMethod.java

Demo06FileMethod.java

Demo07FileMethod.java

Demo02FileMethod.java

Demo05FileMethod.java

Demo02File.java

Demo04FileMethod.java

Demo01Separator.java

Demo03FileMethod.java

DemoHashCode.java

DemoStringHashCode.java

Demo2HashSet.java

DemoLinkedHashSet01.java

DemoStringHashCode1.java

Demo01PersonHashSet.java

DemoHashCode1.java

DemoSetInterface.java

Person.java

Person1.java

DemoHashSet.java

VariableParameters.java

DemoLinkedHashSet02.java

DemoLinkedHashSet.java

DemoType.java

DemoUnpack.java

DemoPackUnpackAutomatic.java

DemoType2.java

DemoPack.java

DemoList.java

DemoLinkedListAddFirstLast.java

DemoLinkedListRemoveFirstLast.java

DemoLinkedListIsEmpty.java

DemoListAdd.java

DemoLinkedList.java

DemoLinkedListGetFirstLast.java

DemoListSet.java

DemoLinkedListPushPop.java

DemoListGet.java

DemoArrayList.java

DemoListRemove.java

Demo01FileAndDirectory.java

Demo02FileAndDirectory.java

DemoFactorial.java

DemoSum.java

Demo01StringBuilder.java

DemoStringBuilderToString.java

DemoStringBuilderAppend.java

Demo01Calculator.java

Demo01InvokeCook.java

Demo02Calculator.java

Demo02Runnable.java

Demo01Array.java

Runnable01Implement.java

Demo03Runnable.java

Demo03Calculator.java

Demo01Runnable.java

Demo02Array.java

Cook.java

Person.java

Demo01Lambda.java

Calculator.java

DemoCollections.java

Demo02CollectionsSort.java

Demo01CollectionsSort.java

DemoCollectionsShuffle.java

Person.java

DemoCollectionsAddAll.java

Comparator.java

CharNumber.java

DemoCharNumber.java

Hero.java

Skill.java

Fu.java

DemoMain1.java

Demo02InnerClass.java

Outer1.java

Body.java

Demo01InnerClass.java

Demo01Anonymous.java

Demo02Anonymous.java

SkillImplements.java

InterfaceImplements.java

Zi.java

Hero1.java

DemoMain3.java

DemoArrayList.java

DemoMain2.java

Outer.java

anonymousInterface01.java

Weapon.java

Dog2.java

Mouse.java

DemoComputer.java

DemoCat.java

Demo01InstanceOf.java

AbstractAnimal1.java

Zi01Polymorphism.java

Fu01Polymorphism.java

Cat2.java

Demo01Polymorphism.java

Keyboard.java

Fu02Polymorphism.java

Zi02Polymorphism.java

Cat1.java

AbstractAnimal.java

Demo02Polymorphism.java

Cat.java

AbstractAnimal2.java

Fu03Polymorphism.java

Zi03Polymorphism.java

Demo03Polymorphism.java

GiveMeAnimal.java

Usb.java

DemoCat1Dog1.java

Dog1.java

Person.java

Person1.java

DemoStudent.java

Student.java

Demo.java

DemoPerson.java

Demo01Final.java

Demo.java

Customer.java

Demo01WaitNotify.java

Hotel.java

Demo03WaitNotify.java

Demo02WaitNotify.java

Food.java

WaitWakeMechanism.java

Demo.java

MyThread.java

Demo01MyThread.java

MovieTicket01.java

Demo01MovieTicket.java

Demo01Multithreading.java

DemoThreadRunnable.java

MyThread2.java

Demo01MyThread2.java

MovieTicket04.java

Demo01MainThread.java

MyRunnable.java

Demo03MovieTicket.java

Person.java

Demo04MovieTicket.java

MovieTicket05.java

Demo02MainThread.java

Demo03MyThread.java

Demo05MovieTicket.java

Student.java

MovieTicket02.java

DemoSimpleThread.java

MovieTicket03.java

Demo02MyThread.java

Demo02MovieTicket.java

DemoRunnable.java

FightAgainstLandlords.java

DemoFightAgainstLandlords.java

DemoCollectionAdd.java

DemoCollectionRemove.java

DemoCollectionSize.java

DemoCollectionContains.java

DemoCollectionIsEmpty.java

DemoCollectionToArray.java

DemoCollectionClear.java

DemoForEach.java

Demo01Iterator.java

DemoIterator.java

GenericInterfaceImplement01.java

Demo03Generic.java

DemoGenericInterfaceImplement.java

GenericInterface.java

GenericInterface01.java

DemoGenericClass.java

IteratorArrayList.java

DemoGenericInterfaceImplement01.java

GenericClass.java

Demo02Generic.java

GenericInterfaceImplement.java

GenericMethod.java

Demo04Generic.java

Demo01Generic.java

DemoIteratorArrayList.java

DemoGenericMethod.java

Fu.java

Demo01FinallyReturn.java

DemoArrayException.java

MyUsersException.java

Demo02TryCatch.java

Demo02Throw.java

DemoFinally.java

Demo01ManyException.java

Demo01Throws.java

Demo01ObjectsNonNull.java

Demo03Throw.java

Zi.java

DemoObjectsNonNull.java

Demo01Exception.java

Demo01Throw.java

Demo01TryCatch.java

Demo02ThreadPool.java

Runnable01.java

Demo01ThreadPool.java

Demo01Calendar.java

DemoCalendarAdd.java

DemoCalendarGet.java

DemoCalendarSet.java

DemoCalendarGetTime.java

InterfacePrivateOne.java

InterfaceConst.java

Fu.java

AbstractInterfaceImplements.java

InterfaceOne.java

InterfaceA.java

InterfaceDefaultImplementsTwo.java

DemoInterfacePrivate.java

DemoInterfaceStaticImplements.java

InterfaceOneTwoImplements.java

InterfaceOneTwo.java

DemoInterface.java

InterfaceDefault.java

InterfacePrivateOneImplements.java

InterfaceFormat.java

Demo1Interface.java

InterfaceFuZi.java

AbstractInterfaceFormat.java

InterfacePrivateTwoImplements.java

DemoInterfaceDefault.java

InterfaceStatic.java

InterfaceImplements.java

AbstractInterface.java

DemoInterfaceConst.java

Zi.java

InterfaceB.java

InterfaceStaticImplements.java

InterfaceDefaultImplementsOne.java

InterfaceTwo.java

InterfacePrivateTwo.java

DemoPersonEquals.java

Person.java

Student.java

DemoObjectEquals.java

DemoStudentToString.java

Demo01Date.java

Demo01FormatMethod.java

DemoDate2.java

DemoGetTime.java

DateFormatAndSimpleDateFormat.java

Demo01ParseMethod.java

DemoDate1.java

DemoDescription.java

DemoSystemCopyArray.java

DemoSystemCurrentTimeMillis.java

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值