递归练习理解

来源:互联网 发布:win10自动安装软件 编辑:程序博客网 时间:2024/06/05 14:58


递归:方法自己调用自己

用递归求阶乘
 求5的阶乘 * 5! * 5 * 4 * 3 * 2 * 1 * 5 * fun(4)(代表4!) * 4 * fun(3)(代表3!) * 3 * fun(2)(代表2!)  * 2 * fun(1)(代表1!)


public class digui {public static void main(String[] args) {//5!int result = 1;for(int i = 1; i <= 5; i++) {result = result * i;}System.out.println(result);System.out.println(fun(25));System.out.println(fun(1000));//0;超出了int范围}public static int fun(int num) {if(num == 1) {return 1;}else {return num * fun(num - 1);}}}

递归的弊端:不能调用次数过多,容易导致栈内存溢出递归的好处:不用知道循环次数 构造方法是否可以递归调用? * 构造方法不能使用递归调用,否则无穷尽也递归调用是否必须有返回值? * 不一定(可以有,也可以没有)


练习需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名


public class dtest {/** * 分析: * 从键盘接收一个文件夹路径 * 1,如果录入的是不存在,给与提示 * 2,如果录入的是文件路径,给与提示 * 3,如果是文件夹路径,直接返回 *  * 打印出该文件夹下所有的.java文件名 * 1,获取到该文件夹路径下的所有的文件和文件夹,存储在File数组中 * 2,遍历数组,对每一个文件或文件夹做判断 * 3,如果是文件,并且后缀是.java的,就打印 * 4,如果是文件夹,就递归调用 */public static void main(String[] args) {File dir = getDir();printJavaFile(dir);}/* * 获取键盘录入的文件夹路径 * 1,返回值类型File * 2,不需要有参数 */public static File getDir() {Scanner sc = new Scanner(System.in);//创建键盘录入对象System.out.println("请输入一个文件夹路径");while(true) {String line = sc.nextLine();//将键盘录入的文件夹路径存储File dir = new File(line);//封装成File对象if(!dir.exists()) {System.out.println("您录入的文件夹路径不存在,请重新录入");}else if(dir.isFile()) {System.out.println("您录入的是文件路径,请重新录入文件夹路径");}else {return dir;}}}/* * 获取文件夹路径下的所.java文件 * 1,返回值类型 void * 2,参数列表File dir */public static void printJavaFile(File dir) {//1,获取到该文件夹路径下的所有的文件和文件夹,存储在File数组中File[] subFiles = dir.listFiles();//2,遍历数组,对每一个文件或文件夹做判断for (File subFile : subFiles) {//3,如果是文件,并且后缀是.java的,就打印if(subFile.isFile() && subFile.getName().endsWith(".java")) {System.out.println(subFile);//4,如果是文件夹,就递归调用}else if (subFile.isDirectory()){printJavaFile(subFile);}}}}





0 0
原创粉丝点击