java递归基础入门.docx
- 文档编号:25432790
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:16
- 大小:185.53KB
java递归基础入门.docx
《java递归基础入门.docx》由会员分享,可在线阅读,更多相关《java递归基础入门.docx(16页珍藏版)》请在冰豆网上搜索。
java递归基础入门
1:
递归(理解)
(1)方法定义中调用方法本身的现象
举例:
老和尚给小和尚讲故事,我们学编程
(2)递归的注意事项;
A:
要有出口,否则就是死递归
B:
次数不能过多,否则内存溢出
C:
构造方法不能递归使用
(3)递归的案例:
A:
递归求阶乘
B:
兔子问题
C:
递归输出指定目录下所有指定后缀名的文件绝对路径
D:
递归删除带内容的目录(小心使用)
2:
IO流(掌握)
(1)IO用于在设备间进行数据传输的操作
(2)分类:
A:
流向
输入流读取数据
输出流写出数据
B:
数据类型
字节流
字节输入流
字节输出流
字符流
字符输入流
字符输出流
注意:
a:
如果我们没有明确说明按照什么分,默认按照数据类型分。
b:
除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
(3)FileOutputStream写出数据
A:
操作步骤
a:
创建字节输出流对象
b:
调用write()方法
c:
释放资源
B:
代码体现:
FileOutputStreamfos=newFileOutputStream("fos.txt");
fos.write("hello".getBytes());
fos.close();
C:
要注意的问题?
a:
创建字节输出流对象做了几件事情?
b:
为什么要close()?
c:
如何实现数据的换行?
d:
如何实现数据的追加写入?
(4)FileInputStream读取数据
A:
操作步骤
a:
创建字节输入流对象
b:
调用read()方法
c:
释放资源
B:
代码体现:
FileInputStreamfis=newFileInputStream("fos.txt");
//方式1
intby=0;
while((by=fis.read())!
=-1){
System.out.print((char)by);
}
//方式2
byte[]bys=newbyte[1024];
intlen=0;
while((len=fis.read(bys))!
=-1){
System.out.print(newString(bys,0,len));
}
fis.close();
(5)案例:
2种实现
A:
复制文本文件
B:
复制图片
C:
复制视频
(6)字节缓冲区流
A:
BufferedOutputStream
B:
BufferedInputStream
(7)案例:
4种实现
A:
复制文本文件
B:
复制图片
C:
复制视频
3:
自学字符流
IO流分类
字节流:
InputStream
FileInputStream
BufferedInputStream
OutputStream
FileOutputStream
BufferedOutputStream
字符流:
Reader
FileReader
BufferedReader
Writer
FileWriter
BufferedWriter
FileInputStream读取数据的两种方法
IO流的分类
递归解决问题的思路
递归求阶乘
1递归
packagecn.itcast_01;
/*
*递归:
方法定义中调用方法本身的现象
*
*方法的嵌套调用,这不是递归。
*Math.max(Math.max(a,b),c);
*
*publicvoidshow(intn){
*if(n<=0){
*System.exit(0);
*}
*System.out.println(n);
*show(--n);
*}
*
*注意事项:
*A:
递归一定要有出口,否则就是死递归
*B:
递归的次数不能太多,否则就内存溢出
*C:
构造方法不能递归使用
*
*举例:
*A:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
*从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
*从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
*从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
*...
*庙挂了,或者山崩了
*B:
学编程--高薪就业--挣钱--娶媳妇--生娃娃--放羊--挣学费
*学编程--高薪就业--挣钱--娶媳妇--生娃娃--放羊--挣学费
*学编程--高薪就业--挣钱--娶媳妇--生娃娃--放羊--挣学费
*学编程--高薪就业--挣钱--娶媳妇--生娃娃--放羊--挣学费
*...
*娶不到媳妇或者生不了娃娃
*/
publicclassDiGuiDemo{
//publicDiGuiDemo(){
//DiGuiDemo();
//}
}
2求5的阶乘
packagecn.itcast_02;
/*
*需求:
请用代码实现求5的阶乘。
*下面的知识要知道:
*5!
=1*2*3*4*5
*5!
=5*4!
*
*有几种方案实现呢?
*A:
循环实现
*B:
递归实现
*a:
做递归要写一个方法
*b:
出口条件
*c:
规律
*/
publicclassDiGuiDemo{
publicstaticvoidmain(String[]args){
intjc=1;
for(intx=2;x<=5;x++){
jc*=x;
}
System.out.println("5的阶乘是:
"+jc);
System.out.println("5的阶乘是:
"+jieCheng(5));
}
/*
*做递归要写一个方法:
*返回值类型:
int
*参数列表:
intn
*出口条件:
*if(n==1){return1;}
*规律:
*if(n!
=1){returnn*方法名(n-1);}
*/
publicstaticintjieCheng(intn){
if(n==1){
return1;
}else{
returnn*jieCheng(n-1);
}
}
}
3兔子问题
packagecn.itcast_02;
/*
*有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
*分析:
我们要想办法找规律
*兔子对数
*第一个月:
1
*第二个月:
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
*/
publicclassDiGuiDemo2{
publicstaticvoidmain(String[]args){
//定义一个数组
int[]arr=newint[20];
arr[0]=1;
arr[1]=1;
//arr[2]=arr[0]+arr[1];
//arr[3]=arr[1]+arr[2];
//...
for(intx=2;x arr[x]=arr[x-2]+arr[x-1]; } System.out.println(arr[19]);//6765 System.out.println("----------------"); inta=1; intb=1; for(intx=0;x<18;x++){ //临时变量存储上一次的a inttemp=a; a=b; b=temp+b; } System.out.println(b); System.out.println("----------------"); System.out.println(fib(20)); } /* *方法: 返回值类型: int参数列表: intn出口条件: 第一个月是1,第二个月是1规律: 从第三个月开始,每一个月是前两个月之和 */ publicstaticintfib(intn){ if(n==1||n==2){ return1; }else{ returnfib(n-1)+fib(n-2); } } } 4递归删除带内容的目录 packagecn.itcast_03; importjava.io.File; /* *需求: 递归删除带内容的目录 * *目录我已经给定: demo * *分析: *A: 封装目录 *B: 获取该目录下的所有文件或者文件夹的File数组 *C: 遍历该File数组,得到每一个File对象 *D: 判断该File对象是否是文件夹 *是: 回到B *否: 就删除 */ publicclassFileDeleteDemo{ publicstaticvoidmain(String[]args){ //封装目录 FilesrcFolder=newFile("demo"); //递归实现 deleteFolder(srcFolder); } privatestaticvoiddeleteFolder(FilesrcFolder){ //获取该目录下的所有文件或者文件夹的File数组 File[]fileArray=srcFolder.listFiles(); if(fileArray! =null){ //遍历该File数组,得到每一个File对象 for(Filefile: fileArray){ //判断该File对象是否是文件夹 if(file.isDirectory()){ deleteFolder(file); }else{ System.out.println(file.getName()+"---"+file.delete()); } } System.out .println(srcFolder.getName()+"---"+srcFolder.delete()); } } } 5绝对路径 packagecn.itcast_03; importjava.io.File; /* *需求: 请大家把E: \JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台。 * *分析: *A: 封装目录 *B: 获取该目录下所有的文件或者文件夹的File数组 *C: 遍历该File数组,得到每一个File对象 *D: 判断该File对象是否是文件夹 *是: 回到B *否: 继续判断是否以.java结尾 *是: 就输出该文件的绝对路径 *否: 不搭理它 */ publicclassFilePathDemo{ publicstaticvoidmain(String[]args){ //封装目录 FilesrcFolder=newFile("E: \\JavaSE"); //递归功能实现 getAllJavaFilePaths(srcFolder); } privatestaticvoidgetAllJavaFilePaths(FilesrcFolder){ //获取该目录下所有的文件或者文件夹的File数组 File[]fileArray=srcFolder.listFiles(); //遍历该File数组,得到每一个File对象 for(Filefile: fileArray){ //判断该File对象是否是文件夹 if(file.isDirectory()){ getAllJavaFilePaths(file); }else{ //继续判断是否以.java结尾 if(file.getName().endsWith(".java")){ //就输出该文件的绝对路径 System.out.println(file.getAbsolutePath()); } } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 递归 基础 入门