package java基礎;
/**
* 參數遞歸和迭代的效率,遞歸效率太低,如果用到遞歸一般使用循環
*/
public class TestRecursion {
public static void main(String[] args) {
//標記遞歸方法開始執行事件
long d1=System.currentTimeMillis();
System.out.printf("%d階乘結果:%s%n",10,factorial(10));
//遞歸程序結束時間
long d2=System.currentTimeMillis();
System.out.printf("遞歸耗時:%s%n",d2-d1);//計算出遞歸使用的時間
factorialLoop(10);
}
//計算階乘方法,遞歸就是方法自己調用自己
static long factorial(int a){
if(a==1){
return 1;
}
else {
return a*factorial(a-1);
}
}
//高性能一般使用循環,遞歸效率太低
static long factorialLoop(int b){
long d3=System.currentTimeMillis();
long result=1;
while (b>1){
result*=b*(b-1);
b=b-2;
}
long d4=System.currentTimeMillis();
System.out.println("循環階乘結果"+result);
System.out.printf("遞歸耗時:%s%n",d4-d3);
return result;
}
}
執行結果:
10階乘結果:3628800
遞歸耗時:25
循環階乘結果3628800
遞歸耗時:0