一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
/* * 递归 * 当n = 1, 只有1中跳法;当n = 2时,有两种跳法;当n = 3 时,有3种跳法;当n = 4时,有5种跳法; * 当n = 5时,有8种跳法;.......规律类似于Fibonacci数列(0,1,1,2,3,5,8....) */ public static int jumpFloor(int number) { if(number==1) return 1; else if(number==2) return 2; else return jumpFloor(number-1)+jumpFloor(number-2); }
//排列组合方法
public static int jumpFloor(int number) {
int t = number / 2;
int sum = 0, i;
for (i = t; i >= 0; i--) {
int o = number - i * 2;
sum += c(i, o);
}
return sum;
}
public static long c(int t, int o) {
long r;
if (t >= o)
r = a(t + o, t) / a(o, 0);
else
r = a(t + o, o) / a(t, 0);
return r;
}
//从n到m-1的阶乘
public static long a(int n, int m) {
long s = 1, i;
for (i = n; i > m; i--) {
s *= i;
}
return s;
}
浙公网安备 33010602011771号