递归: 就是函数自身调用自身。
什么时候用递归呢?
当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。
简单说: 功能内部又用到该功能,但是传递的参数值不确定。(每次功能参与运算的未知内容不确定)。
递归的注意事项:
1:一定要定义递归的条件。
2:递归的次数不要过多。容易出现 StackOverflowError 栈内存溢出 错误。
其实递归就是在栈内存中不断的加载同一个函数。
列出(或删除)指定目录下的所有文件
- 计算代码
/**
* 找出指定目录下的所有文件
* 递归
*
* @param files
* @return
*/
public static List<File> listFiles(File files) {
List<File> fileList = new ArrayList<>();
if (files.isDirectory()) {
for (File file : files.listFiles()) {
fileList.addAll(listFiles(file));
}
} else {
fileList.add(files);
}
return fileList;
}
- 测试代码
public static void main(String args[]) {
List<File> l = listFiles(new File("E:\\kejiang\\IdeaProjects\\JavaProjectTest\\src"));
System.out.println("共" + l.size() + "个文件");
for (File f : l) {
System.out.println(f.getName());//(这里只打印了文件的文件名)
}
}
- 运行效果
共23个文件
ArrayTest.java
Test.java
CopyTextFileTest.java
CopyTextFileTest_Copy.txt
RecursionTest.java
SystemIOTest.java
SystemOut.txt
ListTest.java
UserBean.java
UserComparator.java
Client.java
Server.java
StringTest.java
Consumer.java
Producer.java
ProducerConsumerTest.java
Resource.java
Consumer.java
MainTest.java
Producer.java
Resource.java
RunnableTest.java
ThreadTest.java
计算从1+2+3+...+N的和
- 算法代码
/**
* 获取从1+到N的和
*
* @param num
* @return
*/
public static int getSum(int num) {
if (num == 1) {
return 1;
}
return num + getSum(num - 1);
}
- 测试代码
public static void main(String args[]) {
System.out.println(getSum(100));
}
- 运行结果
5050
网友评论