代码如下:
import java.util.Scanner;
public class TextRecursion {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入所求数的阶乘:");
long a = input.nextLong();
long d1 = System.currentTimeMillis();
System.out.println(a + "阶乘的结果为" + factorial(a));
long d2 = System.currentTimeMillis();
System.out.printf("递归费时:%s%n", d2-d1);
System.out.println("循环求阶乘的结果为:" + factorialLoop(a));
}
//递归求阶乘
public static long factorial(long n) {
if(n == 1) { //递归头
return 1;
}
else { //递归体
return n * factorial(n - 1);
}
}
//循环求阶乘
public static long factorialLoop(long a) {
long d3 = System.currentTimeMillis();
long result = 1;
while(a > 1) {
result *= a * (a - 1);
a -= 2;
}
long d4 = System.currentTimeMillis();
System.out.println(result);
System.out.printf("普通循环费时:%s%n",d4 - d3);
return result;
}
}
运行结果:
请输入所求数的阶乘:10
10阶乘的结果为3628800
递归费时:0
3628800
普通循环费时:0
循环求阶乘的结果为:3628800