上楼梯有多少种走法
一个小孩上楼梯,可以走 一步, 两步,三步, 问走n阶楼梯有多少种走法
public class _上楼梯有多少种走法 {
/**
* 一个小孩上楼梯,可以走 一步, 两步,三步, 问走n阶楼梯有多少种走法
* f(1)=1; f(2)=2; f(3)=4; f(5)=7; 推出 f(n)=f(n-1)+f(n-2)+f(n-3);
* @param args
*/
static final int mod = 1000000007;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(sum1(4) % mod);
}
//递归形式 (自顶向下逐步分解)
public static int sum(int n) {
if (n == 1) {
return 1;
}else if (n == 2) {
return 2;
}else if (n == 3) {
return 4;
} else {
return sum(n-1) + sum(n-2) + sum(n-3);
}
}
//迭代形式 (自底向上逐步求解)
public static int sum1(int n) {
if (n < 0) {
return 0;
}
if (n == 0 || n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int x1 = 1;
int x2 = 2;
int x3 = 4;
for (int i = 4; i <= n; i++) {
int x_1 = x1;
x1 = x2;
x2 = x3;
x3 = ((x1+x2)% mod + x_1) % mod;
}
return x3;
}
}