1. 本题知识点
递归
2. 题目描述
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级……它也可以跳上 n 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
3. 解决思路
思路一:递归
因为 n 级台阶,第一步有 n 种跳法:跳 1 级、跳 2 级…跳 n 级
跳 1 级,剩下 n-1 级,则剩下跳法是 f(n-1)
跳 2 级,剩下 n-2 级,则剩下跳法是 f(n-2)
所以 f(n)=f(n-1)+f(n-2)+…+f(1)
因为 f(n-1)=f(n-2)+f(n-3)+…+f(1)
所以 f(n)=2*f(n-1)
于是可以得到以下递推公式
f
(
n
)
=
{
1
,
n = 1
2
∗
f
(
n
−
1
)
,
n > 1
f(n) = \begin{cases} 1, & \text{n = 1} \\ 2*f(n-1),& \text{n > 1} \end{cases}
f(n)={1,2∗f(n−1),n = 1n > 1
思路二:等比数列
从上面的也可以看出来这是一个等比数列,那我们可以得出它的通项公式:
f
(
n
)
=
2
(
n
−
1
)
∗
f
(
1
)
=
2
(
n
−
1
)
f(n) = 2^{(n-1)} *f(1)= 2^{(n-1)}
f(n)=2(n−1)∗f(1)=2(n−1)
4. 代码
使用递归
public class Solution {
public int JumpFloorII(int target) {
if (target == 1) {
return 1;
}
return 2 * JumpFloorII(target - 1);
}
}
使用等比数列
public class Solution2 {
public int JumpFloorII(int target) {
return (int) Math.pow(2,target-1);
}
}