/**
* 测试递归
* 用递归的方式计算阶乘
* @author admin
*
*/
public class TestRecursion {
public static void main(String[] args) {
//a();
double d1 = System.currentTimeMillis();
int result =factorial(10);
double d2 = System.currentTimeMillis();
System.out.println("10的阶乘是: "+result+ "\n递归耗时:"+(d2-d1));
double d3 = System.currentTimeMillis();
int result1 =factorialLoop(10);
double d4 = System.currentTimeMillis();
System.out.println("10的阶乘是: "+result1+ "\n普通循环耗时:"+(d4-d3));
}
//用递归计算阶乘的方法
static int factorial(int n) {
if(n== 1) {
return 1;
}
else {
return n*factorial(n-1);
//当n =1时,f(2)方法结束、接着f(3)方法结束.......f(9)方法结束、接着f(10)方法结束
}
}
//用普通循环的方法计算10的阶乘
static int factorialLoop(int n) {
int result =1;
while(n>0) {
result *= n*(n-1);
n -= 2;
}
return result;
}
static int count = 0;
static void a() {
count ++;
System.out.println("a");
if(count <5) { //递归体,什么时候调用自身
a();
}
else { //递归头,用于结束递归的条件,如果没有递归头将陷入死循环
return;
}
}
}