1.效果
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的阶乘
代码
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 路径下的所有文件及文件夹的决定路径
代码
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
代码
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 使用递归一次性删除文件及文件夹
删除前
删除后
代码:
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());
}
}
}