递归

来源:互联网 发布:mac虚拟机win7镜像下载 编辑:程序博客网 时间:2024/06/08 01:09

递归

递归是方法本身调用方法的一种现象

Math类中有一个方法max()求最大值

1.方法嵌套不属于递归

Math.max(Math.max(10,20),30):方法嵌套

2.方法递归的条件:

1)必须定义方法

2)要有出口条件

3)寻找规律

3.递归可以用在构造方法上,但不能用在成员方法上

举例:

package digui;/* * 求5的阶乘 * 5!=5*4*3*2*1 * 5!=5*4! * 方式一:for循环 * 方式二:递归 */public class DiGuiDemo {public static void main(String[] args) {//for循环int jc=1;for(int x=5;x>0;x--){jc*=x;}System.out.println("5的阶乘是:"+jc);System.out.println("--------------");System.out.println(jieCheng(5));        }//递归//1)定义一个方法private static int jieCheng(int n) {//出口条件if(n==1){return 1;}else{return n*jieCheng(n-1);}}}

4.练习,子生孙孙生子

package digui;/* *  有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后 * 每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?(不死神兔) * 分析:找兔子对数的规律: * 兔子生长分三个周期, *          幼年,青年,老年              共计 * 第1月                1   0    0       1 * 第2月                0   1    0       1 * 第3月                1   0    1       2 * 第4月                1   1    1       3 * 第5月                2   1    2       5 * 第6月                3   2    3       8 * 第7月                5   3    5       13 * 第8月                8    5   8       21 * 兔子的总数分别为1,1,2,3,5,8,13,21....... * 即从第三个月起,后面的兔子总数都等于前面两个月的兔子总数之和 */public class DiGuiDemo2 {public static void main(String[] args) {//方法一:for循环//定义一个数组int[] arr=new int[20];arr[0]=1;arr[1]=1;for(int x=2;x<arr.length;x++){arr[x]=arr[x-1]+arr[x-2];System.out.println("第"+x+"个月的兔子对数是:"+arr[x]);}System.out.println("------");   System.out.println(fanZhi(20));}//方法二:递归private static int fanZhi(int n) {if(n==1||n==2){return 1;}else{return fanZhi(n-1)+fanZhi(n-2);}}}


 

5.递归删除带目录的内容

import java.io.FileWriter;import java.io.IOException;/* * 删除Demo文件夹下带内容的目录 * 1)将Demo文件封装成一个File对象 * 2)采用递归删除,定义一个方法 * 3)获取当前目录下所有的文件以及文件夹的File数组 * 4)给File数组做非空判断 * 遍历file数组,获取到每一个file对象 * 判断是否是文件夹,是,返回2)继续删除,不是,直接删除 *  */public class DiGuiDemo3 {public static void main(String[] args) throws IOException {File file=new File("Demo\\aaa\\bbb");file.mkdirs();File file2=new File(file,"a.txt");file2.createNewFile();BufferedWriter bw=new BufferedWriter(new FileWriter(file2));bw.write("this is a txt");bw.flush();bw.close();File scrfile =new File("Demo");delete(scrfile);}private static void delete(File scrfile) {// TODO Auto-generated method stub//获取Demo文件夹下的所有文件以及文件夹的File数组File[]arrfile=scrfile.listFiles();for(File f:arrfile){//判断是否是文件夹if(f.isDirectory()){//是,继续返回去删除delete(f);}else{//否则直接删除文件System.out.println(f.getName()+","+f.delete());}}}}

6.递归输出绝对路径

* 需求:把d:\develop目录下所有的java结尾的文件的绝对路径给输出在控制台。 * 1)封装目录 * 2)递归,定义一个方法,获取当前目录下的所有文件以及文件夹的File数组 * 3)对File数组做非空判断 * 4)增强for遍历,获取到每一个file对象 * 判断是否是一个文件夹 * 是:返回,继续回到2) * 不是: * 判断文件是否以.java结尾 * 是:直接输出 * 不是,不搭理 */public class DiGuiDemo4 {public static void main(String[] args) {File scrFoler=new File("d:\\develop");getAllFile(scrFoler);}private static void getAllFile(File scrFoler) {File[]arrayFile=scrFoler.listFiles();if(arrayFile!=null){for(File f:arrayFile){if(f.isDirectory()){getAllFile(f);}else{if(f.getName().endsWith(".java")){System.out.println(f.getAbsolutePath());}}}}}}


原创粉丝点击