递归

来源:互联网 发布:linux 删除路由表 编辑:程序博客网 时间:2024/06/13 02:27

递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,满足出口的条件程序会结束
练习一: 计算文件夹的大小

/* * ###23.01_File类递归练习(统计该文件夹大小)* 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小    *    1  从键盘接受一个文件路径    *    2  将该路径封装成 File结果    *    3  对file 对象判断     *    4  将不是文件夹的文件路径返回    *        *    统计文件夹的大小    *    1   定义一个求和变量    *    2  获取该文件夹下所有的文件和文件夹     *    3  遍历数组数组    *    4  判断是文件就计算大小     *    5  是文件夹就递归调用      *     *  * */public class text22 {       public static void main(String[]args){               File dir=getDir();              System.out.print("文件输入成功");              System.out.print("文件夹的大小"+getFileLength(dir));    }    private static long getFileLength(File dir) {        long sum = 0;        File[] files=dir.listFiles();        for (File file : files) {            if (file.isDirectory()) {                sum+=getFileLength(file);            }else if (file.isFile()) {                sum+=file.length();            }         }        return sum;    }    private static File getDir() {        // TODO Auto-generated method stub        Scanner scanner=new Scanner(System.in);        String filepath=scanner.nextLine();        File dir=new File(filepath);        while (true) {            if(!dir.exists()) {                System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:");            }else if(dir.isFile()) {                System.out.println("您录入的是文件路径,请输入一个文件夹路径:");            }else {                return dir;         }        }    } }   

练习二 :
从键盘接收一个文件夹路径,删除该文件夹

package com.itheima;import java.io.File;import java.util.Scanner;public class text22 {    /**     * 需求:2,从键盘接收一个文件夹路径,删除该文件夹     *      * 删除该文件夹     * 分析:     * 1,获取该文件夹下的所有的文件和文件夹     * 2,遍历数组     * 3,判断是文件直接删除     * 4,如果是文件夹,递归调用     * 5,循环结束后,把空文件夹删掉     */    public static void main(String[] args) {        //1,创建键盘录入对象                Scanner sc = new Scanner(System.in);                System.out.println("请输入一个文件夹路径:");                String line = sc.nextLine();                File dir = new File(line);                        //获取文件夹路径               deleteFile(dir);    }    /*     * 删除该文件夹     * 1,返回值类型 void     * 2,参数列表File dir     */    public static void deleteFile(File dir) {           File[] subFiles = dir.listFiles();              for (File subFile : subFiles) {            if(subFile.isFile()) {                subFile.delete();            }else {                deleteFile(subFile);                        }        }        dir.delete();    }}

练习三
从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

package com.itheima;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Scanner;public class Test3 {    /**     * 需求:3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中     *      * 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中     * 分析:     * 1,在目标文件夹中创建原文件夹     * 2,获取原文件夹中所有的文件和文件夹,存储在File数组中     * 3,遍历数组     * 4,如果是文件就用io流读写     * 5,如果是文件夹就递归调用     * @throws IOException      */    public static void main(String[] args) throws IOException {        File src =getDir();        File dest =getDir();        if(src.equals(dest)) {            System.out.println("目标文件夹是源文件夹的子文件夹");        }else {            copy(src,dest);        }    }    private static void copy(File src, File dest) throws IOException {        // TODO Auto-generated method stub        //1 创建文件目录         File  newdir=new File(dest,src.getName());        newdir.mkdir();        //2  获取子文件夹目录列表        File[] subfiles=src.listFiles();        for (File file : subfiles) {            if (file.isFile()) {                BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));                BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(newdir, file.getName())));                int ch=0;                while ((ch=bis.read())!=-1) {                        bos.write(ch);                }                bos.flush();                bos.close();                bis.close();            }else {                copy(file, newdir);            }        }    }    public static File getDir() {        //1,创建键盘录入对象        Scanner sc = new Scanner(System.in);        System.out.println("请输入一个文件夹路径:");        //2,定义一个无限循环        while(true) {            //3,将键盘录入的结果存储并封装成File对象            String line = sc.nextLine();            File dir = new File(line);            //4,对File对象判断            if(!dir.exists()) {                System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:");            }else if(dir.isFile()) {                System.out.println("您录入的是文件路径,请输入一个文件夹路径:");            }else {                //5,将文件夹路径对象返回                return dir;            }        }    }}    /*     * 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中     * 1,返回值类型void     * 2,参数列表File src,File dest     */

练习四 :
用面向对象的思想 解决 递归问题

 不死神兔* 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。* 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡,* 问:一对刚出生的兔子,一年内繁殖成多少对兔子?

class Robit{
int idkey;
int age;
public Robit(int idkey,int age ) {
this.idkey=idkey;
this.age=age;
}
public void grow() {//兔子成长成大兔子
idkey=2;
}

}
public class text12Robiit {

static ArrayList arryArrayList =new ArrayList<>();
public static void main(String arg[]){
Robit robitant=new Robit(1,0);
arryArrayList.add(robitant);
for (int i = 0; i < 12; i++) {
for (int j=0;j

0 0
原创粉丝点击