java递归基础入门.docx

上传人:b****7 文档编号:25432790 上传时间:2023-06-08 格式:DOCX 页数:16 大小:185.53KB
下载 相关 举报
java递归基础入门.docx_第1页
第1页 / 共16页
java递归基础入门.docx_第2页
第2页 / 共16页
java递归基础入门.docx_第3页
第3页 / 共16页
java递归基础入门.docx_第4页
第4页 / 共16页
java递归基础入门.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

java递归基础入门.docx

《java递归基础入门.docx》由会员分享,可在线阅读,更多相关《java递归基础入门.docx(16页珍藏版)》请在冰豆网上搜索。

java递归基础入门.docx

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());

}

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1