樓梯有n階臺階,上樓可以一步上1階,2階,3階,編程序計算共有多少種不同的走法?
public class testClimbLadders {
public static void main(String[] args) {
int mm = 40;
long time1 = System.currentTimeMillis();
System.out.println(countWays1(mm));
long time2 = System.currentTimeMillis();
System.out.println("遞歸方式耗時"+(time2-time1)+"ms");
long time3 = System.currentTimeMillis();
System.out.println(countWays2(mm));
long time4 = System.currentTimeMillis();
System.out.println("遞歸方式耗時"+(time4-time3)+"ms");
long time5 = System.currentTimeMillis();
System.out.println(countWays3(mm));
long time6 = System.currentTimeMillis();
System.out.println("遞歸方式耗時"+(time6-time5)+"ms");
}
private static long countWays1(int n){
if(n <= 0){
return 0;
}else if(n == 1){
return 1;
}else if(n == 2){
return 2;
}else if(n == 3){
return 4;
}else {
return countWays1(n-1) + countWays1( n-2)+countWays1(n-3);
}
}
private static long countWays2(int n){
long[] arr = new long[n+1];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 4;
for(int i =4;i<=n;i++){
arr[i] = arr[i-1] +arr[i-2] +arr[i-3];
}
return arr[n];
}
private static long countWays3(int n){
long num1 = 1;
long num2 = 2;
long num3 = 4;
for(int i=4; i<=n; i ++){
long tmp = num3 + num2 +num1;
long tmp1 = num3;
long tmp2 = num2;
num3 = tmp;
num2 = tmp1;
num1 =tmp2;
}
return num3;
}
}