变态青蛙跳问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级台阶,求该青蛙跳上一个n级的台阶总共有多少种跳法?
规律(为了表示方便,我们将一次性跳完的情况设为f(0)):
到达1阶台阶只有1种可能:f(1)=1
到达2阶台阶有2种可能:f(2)=2
要到达3阶台阶,可以在1阶起跳,也可以在2阶起跳,所以只需要到达1阶台阶的可能情况+到达2阶的可能情况+f(0):
f(3)=f(2)+f(1)+1
同理到达n阶台阶,可以跳完n阶的情况分别是:一次跳完f(0),先跳一步f(1),后面还有f(n-1)种跳法;或者先跳两步f(2),后面还有f(n-2)种跳法。依次类推,第一次跳出n阶后,后面还有 f(n-n)中跳法,可以得出:
f(n) = f(n-1)+f(n-2)+f(n-3)+…+f(0)
由递推关系可得 f(n) = 2 * f(n-1)
// 递归实现
private static int jumpFloor(int target) {
if (target == 0)
return 0;
if (target == 1)
return 1;
return 2 * jumpFloor(target - 1);
}
// 非递归
public static int jumpFrog(int target) {
if (target == 0 || target == 1)
return 1;
if (target == 2)
return 2;
int sum = 1;
for (int i = 1; i < target; i++) {
sum *= 2;
}
return sum;
}
public static void main(String[] args) {
int a = jumpFloor(5);
System.out.println(a); //16
int b = jumpFrog(5);
System.out.println(b); //16
}