递归: 就是函数自身调用自身。
什么时候用递归呢?
当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。
简单说: 功能内部又用到该功能,但是传递的参数值不确定。(每次功能参与运算的未知内容不确定)。
递归的注意事项:
1:一定要定义递归的条件。
2:递归的次数不要过多。容易出现 StackOverflowError 栈内存溢出 错误。
其实递归就是在栈内存中不断的加载同一个函数。
列出(或删除)指定目录下的所有文件
/*** 找出指定目录下的所有文件* 递归** @param files* @return*/publicstaticList<File>listFiles(Filefiles) { List<File>fileList=newArrayList<>(); if (files.isDirectory()) { for (Filefile : files.listFiles()) { fileList.addAll(listFiles(file)); } } else { fileList.add(files); } returnfileList; }
测试代码
publicstaticvoidmain(Stringargs[]) { List<File>l=listFiles(newFile("E:\\kejiang\\IdeaProjects\\JavaProjectTest\\src")); System.out.println("共"+l.size() +"个文件"); for (Filef : l) { System.out.println(f.getName());//(这里只打印了文件的文件名) } }
运行效果
共23个文件ArrayTest.javaTest.javaCopyTextFileTest.javaCopyTextFileTest_Copy.txtRecursionTest.javaSystemIOTest.javaSystemOut.txtListTest.javaUserBean.javaUserComparator.javaClient.javaServer.javaStringTest.javaConsumer.javaProducer.javaProducerConsumerTest.javaResource.javaConsumer.javaMainTest.javaProducer.javaResource.javaRunnableTest.javaThreadTest.java
计算从1+2+3+…+N的和
/*** 获取从1+到N的和** @param num* @return*/publicstaticintgetSum(intnum) { if (num==1) { return1; } returnnum+getSum(num-1); }
测试代码:
publicstaticvoidmain(Stringargs[]) { System.out.println(getSum(100)); }
结果:5050