所谓递归 (Recursion),就是方法调用自身
对于递归来说,一定有一个出口,让递归结束,只有这样才能保证不出现死循环
n!=n*(n-1)*(n-2)....*2*1
n!=n*(n-1)!
f(x)=n*f(x-1)
(n-1)!=(n-1)(n-2)
题目:用递归实现,5*4*3*2*1的结果
思路:
5*compute(4)
5*compute(3)
5*compute(2)
5*compute(1)
public class Test1
{
//循环计算阶乘,也叫迭代方式
public int compute(int number)
{
int result=1;
for(int i=number;i>0;i--)
{
result*=i;
}
return result;
}
//用递归方法实现
public int compute2(int number)
{
if(1==number)
{
return 1;
}else{
return number*compute2(number-1);
}
}
public static void main(String[] args)
{
Test1 test=new Test1();
System.out.println(test.compute(5));
System.out.println(test.compute2(5));
}
}
输出结果:
120
120
两种方式结果都一样,推荐使用第二种方式
斐波那契数列
题目:实现一个斐波那契数列,1,1,2,3,5,8,13,21.......
思路:先找到出口点,当n等于1或者2的时候都等于1,斐波那契数列公式(n-1)+(n-2)
public class Fab
{
public int compute(int number)
{
if(1==number||2==number){
return 1;
}else{
return compute(number-1)+compute(number-2);
}
}
/**
* @param args
*/
public static void main(String[] args)
{
Fab fab=new Fab();
System.out.println(fab.compute(8));
}
}
输出结果:
21
题目:用递归实现列出一个文件夹下所有的目录,按XXXX一级目录
XXXX二级目录
XXXX三级目录
的格式来显示
import java.io.File;
import java.util.ArrayList;
public class ListAllTest
{
//用于判断目录所处的层次
private static int time;
public static void deepList(File file)
{
if(file.isFile()||0==file.listFiles().length)
{
return;
}else{
File[] files=file.listFiles();
files=sort(files);
for(File f:files)
{
StringBuffer output=new StringBuffer();
if(f.isFile())
{
output.append(getTabs(time));
output.append(f.getName());
}else{
output.append(getTabs(time));
output.append(f.getName());
output.append("\\");
}
System.out.println(output);
if(f.isDirectory()){
time++;
deepList(f);
time--;
}
}
}
}
//整理文件,使得目录在文件之前
public static File[] sort(File[] files)
{
ArrayList<File> sorted=new ArrayList<File>();
//寻找到所有的目录
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]);
}
//判断需要加多少tab方法
private static String getTabs(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("F:/TDDOWNLOAD");
deepList(file);
}
}
输出结果如下:
开发工具\
Dreamweaver8 green.rar
mars\
重构_改善既有代码的设计.rar
Java设计模式.rar
面试技巧\
01面试题目.rar
02上机题目.rar
JAVA学习资料.txt
Linux_SDK开发指南_V1.0_-_20130205.doc
test.rar