问题遇到的现象和发生背景
我今天练习了下递归,也写出了用循环来实现的代码,结果我用时间一比较,递归耗时居然比循环的短,这是为什么啊?
问题相关代码,请勿粘贴截图
public static void main(String[] args) {
long t1 = System.nanoTime();
System.out.println("循环算法求20阶乘结果:"+nonRecusiveFactorial(20));
long t2 = System.nanoTime();
System.out.println("循环耗时:"+(t2-t1)+"纳秒");
System.out.println();
long t3 = System.nanoTime();
System.out.println("递归算法求20阶乘结果:"+recusiveFactorial(20));
long t4 = System.nanoTime();
System.out.println("递归耗时:"+(t4-t3)+"纳秒");
}
static long nonRecusiveFactorial(int n) {
long result = 1;
while (n > 1) {
result *= n * (n - 1);
n -= 2;
}
return result;
}
static long recusiveFactorial(int n) {
if(n==0) {
System.out.println("0的阶乘为1");
return 0;
}
if(n==1) {
return 1;
}else {
return n*recusiveFactorial(n-1);
}
}
运行结果及报错内容
循环算法求20阶乘结果:2432902008176640000
循环耗时:239760纳秒
递归算法求20阶乘结果:2432902008176640000
递归耗,时:37770纳秒
我的解答思路和尝试过的方法
我以为是long的太大计算结果的丢失,也换过BigDecimal类来计算,结果还是递归的耗时低
我想要达到的结果
搜了很多资料都说递归比循环的效率低,结果我测试出来却是递归的耗时短,我不仅写了这个例子,还写了递归、循环实现十进制转二进制,还写了其他例子,结果都是递归的耗时短。难道是因为效率不一定就是体现在时间上吗?