java学习日记_92:IO流之递归算法
来源:互联网 发布:阿尔法收益 知乎 编辑:程序博客网 时间:2024/06/08 15:27
递归:方法定义中调用方法本身的现象
方法的嵌套调用,这不是递归。
Math.max(Math.max(a,b),c);
public void show(int n) {
if(n <= 0) {
System.exit(0);
}
System.out.println(n);
show(--n);
}
注意事项:
举例:
A:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
...
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
分析:我们要想办法找规律
第二个月: 1
第三个月: 2
第四个月: 3
第五个月: 5
第六个月: 8
...
由此可见兔子对象的数据是:
1,1,2,3,5,8...
规则:
如何实现这个程序呢?
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
需求:递归删除带内容的目录
目录我已经给定:demo
分析:
需求:请大家把E:\JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台。
分析:
方法的嵌套调用,这不是递归。
Math.max(Math.max(a,b),c);
public void show(int n) {
if(n <= 0) {
System.exit(0);
}
System.out.println(n);
show(--n);
}
注意事项:
- A:递归一定要有出口,否则就是死递归
- B:递归的次数不能太多,否则就内存溢出
- C:构造方法不能递归使用
举例:
A:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
...
庙挂了,或者山崩了
需求:请用代码实现求5的阶乘。
下面的知识要知道:
5! = 1*2*3*4*5
5! = 5*4!
有几种方案实现呢?
- A:循环实现
- B:递归实现
- a:做递归要写一个方法
- b:出口条件
- c:规律
public class DiGuiDemo {public static void main(String[] args) {int jc = 1;for (int x = 2; x <= 5; x++) {jc *= x;}System.out.println("5的阶乘是:" + jc);System.out.println("5的阶乘是:"+jieCheng(5));}/* * 做递归要写一个方法: * 返回值类型:int * 参数列表:int n * 出口条件: * if(n == 1) {return 1;} * 规律: * if(n != 1) {return n*方法名(n-1);} */public static int jieCheng(int n){if(n==1){return 1;}else {return n*jieCheng(n-1);}}}
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
分析:我们要想办法找规律
- 兔子对数
第二个月: 1
第三个月: 2
第四个月: 3
第五个月: 5
第六个月: 8
...
由此可见兔子对象的数据是:
1,1,2,3,5,8...
规则:
- A:从第三项开始,每一项是前两项之和
- B:而且说明前两项是已知的
如何实现这个程序呢?
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 DiGuiDemo2 {public static void main(String[] args) {// 定义一个数组int[] arr = new int[20];arr[0] = 1;arr[1] = 1;// arr[2] = arr[0] + arr[1];// arr[3] = arr[1] + arr[2];// ...for (int x = 2; x < arr.length; x++) {arr[x] = arr[x - 2] + arr[x - 1];}System.out.println(arr[19]);// 6765System.out.println("----------------");int a = 1;int b = 1;for (int x = 0; x < 18; x++) {// 临时变量存储上一次的aint temp = a;a = b;b = temp + b;}System.out.println(b);System.out.println("----------------");System.out.println(fib(20));}/* * 方法: 返回值类型:int 参数列表:int n 出口条件: 第一个月是1,第二个月是1 规律: 从第三个月开始,每一个月是前两个月之和 */public static int fib(int n) {if (n == 1 || n == 2) {return 1;} else {return fib(n - 1) + fib(n - 2);}}}
需求:递归删除带内容的目录
目录我已经给定:demo
分析:
- A:封装目录
- B:获取该目录下的所有文件或者文件夹的File数组
- C:遍历该File数组,得到每一个File对象
- D:判断该File对象是否是文件夹
是:回到B
否:就删除
import java.io.File;public class FileDeleteDemo {public static void main(String[] args) {// 封装目录File srcFolder = new File("demo");// 递归实现deleteFolder(srcFolder);}private static void deleteFolder(File srcFolder) {// 获取该目录下的所有文件或者文件夹的File数组File[] fileArray = srcFolder.listFiles();if (fileArray != null) {// 遍历该File数组,得到每一个File对象for (File file : fileArray) {// 判断该File对象是否是文件夹if (file.isDirectory()) {deleteFolder(file);} else {System.out.println(file.getName() + "---" + file.delete());}}System.out.println(srcFolder.getName() + "---" + srcFolder.delete());}}}
需求:请大家把E:\JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台。
分析:
- A:封装目录
- B:获取该目录下所有的文件或者文件夹的File数组
- C:遍历该File数组,得到每一个File对象
- D:判断该File对象是否是文件夹
是:回到B否:继续判断是否以.java结尾
是:就输出该文件的绝对路径否:不搭理它
import java.io.File;public class FilePathDemo {public static void main(String[] args) {// 封装目录File srcFolder = new File("E:\\JavaSE");// 递归功能实现getAllJavaFilePaths(srcFolder);}private static void getAllJavaFilePaths(File srcFolder) {// 获取该目录下所有的文件或者文件夹的File数组File[] fileArray = srcFolder.listFiles();// 遍历该File数组,得到每一个File对象for (File file : fileArray) {// 判断该File对象是否是文件夹if (file.isDirectory()) {getAllJavaFilePaths(file);} else {// 继续判断是否以.java结尾if (file.getName().endsWith(".java")) {// 就输出该文件的绝对路径System.out.println(file.getAbsolutePath());}}}}}
0 0
- java学习日记_92:IO流之递归算法
- 黑马程序员--Java学习日记之复习总结(递归以及IO流概述)
- java学习日记_95:IO流之字符流
- java学习日记_91:IO流之File文件操作
- java基础学习IO流之递归 十一 -2
- Java学习日记(十)IO流
- Java学习日记番外篇:IO流
- 学习日记-io流
- 黑马程序员--Java学习日记之IO流(字符流和字节流)
- 黑马程序员--Java学习日记之IO流(其他流&异常处理)
- java学习日记_93:IO流的学习
- 黑马程序员——学习日记之IO流
- 黑马程序员java学习日记十一 IO流
- Java学习之IO流
- Java之IO流学习
- java之递归算法
- Java算法之递归算法
- (41)Java学习笔记——IO流技术 / 递归
- bat命令oracle自动备份
- 深入浅出Docker(四):Docker的集成测试部署之道
- 读取txt文档中的某一行数据
- 不断重置的前端人生
- Android性能优化第(三)篇---MAT比Menmery Monitor更强大
- java学习日记_92:IO流之递归算法
- scala函数式编程使用示例
- Yii2.0-advanced-8—主题配置(themes)
- linux安装glibc版mysql,实测成功 333333333333333
- 需要了解的注解
- Mac OS X上搭建本地SVN服务器
- 自定义navigation(导航栏)
- activity生命周期分析
- 物理内存 虚拟内存