题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
根据前面两题的解题思路,我们可以知道这类题就是要根据题意推导出数学公式。用表示青蛙跳上 n 阶台阶的跳法数:
当 n = 1 时,只有一种跳法,即 1 阶跳:
F
i
b
(
1
)
=
1
\ Fib(1) = 1
Fib(1)=1。
当 n = 2 时,有两种跳的方式,1 阶跳和 2 阶跳:
F
i
b
(
2
)
=
F
i
b
(
1
)
+
F
i
b
(
0
)
=
2
\ Fib(2) = Fib(1) + Fib(0) = 2
Fib(2)=Fib(1)+Fib(0)=2。
当 n = n 时,共有 n 种跳的方式,第一次跳出 1 阶后,后面还有
F
i
b
(
n
−
1
)
\ Fib(n-1)
Fib(n−1)种跳法;第一次跳出 2 阶后,后面还有
F
i
b
(
n
−
2
)
\ Fib(n-2)
Fib(n−2)种跳法 … 第一次跳出 n 阶后,后面还有
F
i
b
(
n
−
n
)
\ Fib(n-n)
Fib(n−n)种跳法。
所以
F
i
b
(
n
)
=
F
i
b
(
0
)
+
F
i
b
(
1
)
+
F
i
b
(
2
)
+
.
.
.
.
.
.
.
+
F
i
b
(
n
−
1
)
\ Fib(n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)
Fib(n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n−1) 又因为
F
i
b
(
n
−
1
)
=
F
i
b
(
0
)
+
F
i
b
(
1
)
+
F
i
b
(
2
)
+
.
.
.
.
.
.
.
+
F
i
b
(
n
−
2
)
\ Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)
Fib(n−1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n−2) 所以两式相减得
F
i
b
(
n
)
=
2
∗
F
i
b
(
n
−
1
)
\ Fib(n) = 2 * Fib(n-1)
Fib(n)=2∗Fib(n−1)
代码实现
import java.util.Scanner;
public class Problem9 {
public static int JumpFloorII(int target) {
if (target == 1)
return 1;
if (target == 2)
return 2;
return 2*JumpFloorII(target-1);
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
System.out.println(JumpFloorII(n));
}
}