第一种(用递归)
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;
}