递归(Recursion):自己调用自己。对于递归来说必须有一个出口,让递归结束,这样才能避免死循环
public class test {
//求解n的阶乘
public int compute(int number){
if (1==number){
return 1;
}
else {
return number*compute(number-1);
}
}
public static void main(String[] args) {
test t=new test();
System.out.println( t.compute(5));
}
}
这就是一个简单的递归算法
用递归计算斐波那契数列
public class test2 {
//用递归计算斐波那契数列
public int compute(int n){
//递归出口
if (1==n||2==n){
return n;
}
else {
return compute(n-1)+compute(n-2);
}
}
public static void main(String[] args) {
test2 t=new test2();
System.out.println(t.compute(9));
}
}
这个是一个比较复杂的递归过程,我们遍历出了一个文件夹的目录,并且有一个有一个""来表示目录
import java.io.File;
import java.util.ArrayList;
public class ListAll {
//判断文件所处的层次
private static int time;
//递归开始
public static void deepList(File file){
if (file.isFile()||file.listFiles().length==0){
time=0;
return;
}else {
File[] files=file.listFiles();
files=sort(files);
for (File f:files){
StringBuffer output=new StringBuffer();
if (f.isFile()){
output.append(getTab(time));
output.append(f.getName());
}else {
output.append(getTab(time));
output.append(f.getName());
output.append("\\");
}
System.out.println(output);
if (f.isDirectory()){
time++;
deepList(f);
time--;
}
}
}
}
//整理文件数组,让目录排在文件之前
private static File[] sort(File[]files){
ArrayList<File> sorted=new ArrayList<>();
//寻找所有目录
for (File f:files){
if (f.isDirectory()){
sorted.add(f);
}
}
//寻找文件
for (File f:files){
if (f.isFile()){
sorted.add(f);
}
}
return sorted.toArray(new File[files.length]);
}
//判断需要加多少的tap的方法表示第几成
private static String getTab(int time){
StringBuffer buffer=new StringBuffer();
for (int i=0;i<time;i++){
buffer.append('\t');
}
return buffer.toString();
}
public static void main(String[] args) {
File file=new File("D:\\BST\\src");
deepList(file);
}
}