题目(跳台阶):
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:
假设现在 6 个台阶,可以从第 5 跳一步到 6,这样的话有多少种方案跳到 5 就有多少种方案跳到 6,
另外也可以从 4 跳两步跳到 6,跳到 4 有多少种方案的话,就有多少种方案跳到 6,
其他的不能从 3 跳到 6 什么的啦,所以最后就是 f(6) = f(5) + f(4),与斐波那契数列代码相同。
题目(变态跳台阶):
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:
使用递归的方法
假设现在 6 个台阶,从第 5 跳一步到 6,这样的话有多少种方案跳到 5 就有多少种方案跳到 6,
从 4 跳两步跳到 6,跳到 4 有多少种方案的话,就有多少种方案跳到 6,
从 3 跳三步跳到 6,跳到 3 有多少种方案的话,就有多少种方案跳到 6,
......
所以就有 f(6) = f(5) + f(4) + f(3) + f(2) + f(1);
f(5) = f(4) + f(3) + f(2) + f(1);
最后 f(6) = 2 * f(5);
代码:
public int JumpFloorII(int target) {
if (target == 0 || target == 1) {
return target;
} else {
return 2 * JumpFloorII(target - 1);
}
}