第一種(用遞歸)
public static int step(int n){
if(n < 1){
throw new IllegalArgumentException("n不能小於1。");
}
if(n == 1 || n == 2){
return n;
}
return step(n - 1) + step(n - 2);
}
推導過程(有助於理解)
循環迭代(動態規划DP)效率更高
> 動態規划動態規划包含三個重要的概念:最優子結構,邊界,狀態轉移公式。
上代碼
public static int step(int n){
if(n < 1){
throw new IllegalArgumentException("n不能小於1。");
}
if(n == 1 || n == 2){
return n;
}
int a = 1;
int b = 2;
int tem = 0;
for (int i = 3; i <= n; i ++){
tem = a + b;
a = b;
b = tem;
}
return tem;
}