java递归的思想_16.Java递归思想

1.效果

2628d14ce2a72b83af9d4d1e7d9d48be.png

2.代码

package cn.ma.digui;

/**

*

*     递归:

*         就是方法内部方法调用自己

*             条件:

*             (1)做递归要写一个方法

*             (2)出口条件

*             (3)规律

*/

public class diGuiDemo {

public static void main(String[] args) {

String s= love(5);//调用内部方法

System.out.println(s);

}

public static String love(int i) {

if(i==1){

return "我真的喜欢你!";

}else{

i--;

return "我喜欢你 ,"+love(i);

}

}

}

3. 练习

3.1  使用递归求出10的阶乘

547e7ef0ea423ec70768204555cfbdca.png

代码

package cn.ma.digui;

/**

* 使用递归求出 10的阶乘

*

*/

public class diGuiTest {

public static void main(String[] args) {

Long  l=    Factorial(10);

System.out.println(l);

}

public static Long Factorial(int i) {

if(i==1){

return 1L;

}else{

//System.out.println(i);

return i*Factorial(i-1);

}

}

}

3.2  输出  D:\develop 路径下的所有文件及文件夹的决定路径

18c71c247d27f8f636eced86216d2a1f.png

代码

package cn.ma.digui;

import java.io.File;

/**

*  得到   D:\MySoftWare\360\360Safe  路径下 所有的.png文件的绝对路径

*/

public class getAllExe {

public static void main(String[] args) {

//1. 造文件对象

File file = new File("D:\\MySoftWare\\360\\360Safe");

getExe(file);

}

public static void getExe(File file) {

File[] files = file.listFiles();

for (File f : files) {

if(f.isDirectory()){

getExe(f);

}else{

if(f.getName().endsWith(".png")){

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

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

}

}

}

}

}

packagecn.ma;

importjava.io.File;

importjava.util.ArrayList;

importjava.util.List;

public classFileDemo{

public static voidmain(String[] args) {

//文件路径String path= "D:/ouath";

//文件后缀// String endWord = ".java";String endWord= "";

//存放结果List list= newArrayList<>();

//递归查询指定路径下的文件getAllFile2(path, endWord, list);

for(String fileName: list) {

System.out.println(fileName);

}

}

private static voidgetAllFile2(Stringpath, StringendWord, List list) {

File file= newFile(path);

File[] files= file.listFiles();

for(File f: files) {

if(f.isDirectory()) {

getAllFile2(f.getAbsolutePath(), endWord, list);

} else{

String name= f.getName();

if(name.endsWith(endWord)) {

list.add(name);

}

}

}

}

}

3.3 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第24个月的兔子对数为多少?

分析:我们要想办法找规律

* 如何实现这个程序呢?

*         A:数组实现

*         B:变量的变化实现

*         C:递归实现

*

* 假如相邻的两个月的兔子对数是a,b

* 第一个相邻的数据:a=1,b=1

* 第二个相邻的数据:a=1,b=2

* 第三个相邻的数据:a=2,b=3

* 第四个相邻的数据:a=3,b=5

* 看到了:下一次的a是以前的b,下一次是以前的a+b

a7ffbc0ced36777bc2227f4536ba2ba4.png

代码

package cn.ma.digui;

/*

* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第24个月的兔子对数为多少?

* 分析:我们要想办法找规律

* 如何实现这个程序呢?

*         A:数组实现

*         B:变量的变化实现

*         C:递归实现

*

* 假如相邻的两个月的兔子对数是a,b

* 第一个相邻的数据:a=1,b=1

* 第二个相邻的数据:a=1,b=2

* 第三个相邻的数据:a=2,b=3

* 第四个相邻的数据:a=3,b=5

* 看到了:下一次的a是以前的b,下一次是以前的a+b

*/

public class rabbitAdd {

public static void main(String[] args) {

int  Num=    calculateNumber(24);

System.out.println("24个月后兔子总数是:"+Num);

}

public static int calculateNumber(int i) {

// TODO Auto-generated method stub

if(i==1 || i==2){

return 1;

}

return calculateNumber(i-1)+calculateNumber(i-2);

}

}

3.4 使用递归一次性删除文件及文件夹

删除前

e93b5873c3a8605b9f8fd3fd07dae1f2.png

删除后

e35468d590b40d56230510d124704139.png

代码:

package cn.ma.digui;

import java.io.File;

/**

*  使用递归方法删除文件及其下面的文件

*          目标:E:\file\mytest

*

*/

public class deleteDemo {

public static void main(String[] args) {

//1. 封装目录

File file = new File("E:\\file\\mytest");// 需要在相应的位置建立文件及文件夹

// 2. 递归实现

deleteAll(file);

}

private static void deleteAll(File file) {

//3. 获取该目录下的所有文件或者文件夹的File数组

File[] fileArr = file.listFiles();

if(fileArr != null){

// 4. // 遍历该File数组,得到每一个File对象

for (File f : fileArr) {

// 5.判断该File对象是否是文件夹

if(f.isDirectory()){

deleteAll(f);

}else{

System.out.println(f.getName()+"------------"+f.delete());

}

}

System.out.println(file.getName()+"---------------------"+file.delete());

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值