青蛙跳台阶
1. 问题要求
有n阶台阶,一只青蛙一次只能跳1个台阶或者2个台阶,问青蛙跳上这个n阶台阶一共有多少种跳法。跳1个台或者跳2个台阶的顺序不一样,次数不一样都算不同的跳法。
2. 思路分析
-
如果只有1阶台阶,那么青蛙只需要跳一级便可以。共1种跳法。

-
如果有2阶台阶。那么它可以跳1个台阶,再跳1个台阶,这是第一种跳法。或者直接跳2个台阶。共2种跳法

-
如果是3阶台阶。第一种跳法可以1个台阶1个台阶的跳(如图红线),第二种跳法可以跳1个台阶再跳2个台阶(如图蓝线),第三种跳法可以跳2个台阶再跳一个台阶(如图绿线)。共3种跳法

-
4阶台阶:一共有5种跳法

-
由此不难发现,
- 1阶------ n1 = 1
- 2阶------ n2 = 2
- 3阶------ n3 = n2 + n1 = 3
- 4阶------ n4 = n3 + n2 = 5
- …
- n阶------ n = (n - 1) + (n - 2)
- 所以,看到这里,相信你们也发现这其实就是个初值不一样的“斐波那契数列”,fn = f(n -1)+ f(n -2)。而初值f1 = 1,f2 = 2。
3. 代码实现
- 循环实现:
package day4_10_14;
/**
* @author:fover
* @date:2020/10/14 14:54
* @version:1.0
* @function:青蛙跳台阶
*/
public class Home3 {
public static void main(String[] args) {
System.out.println("青蛙跳10级台阶有"+frog(10)+"种跳法");
}
public static int frog(int n) {
int f1 = 1;
int f2 = 2;
int f3 = 0;
if (n == 1 || n == 2) {
return n;
} else {
for (int i = 3; i <= n; i++) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
}
return f3;
}
}
- 递归实现
package day4_10_14;
/**
* @author:fover
* @date:2020/10/14 15:08
* @version:1.0
* @function:青蛙跳台阶--递归
*/
public class Home3_other {
public static void main(String[] args) {
System.out.println("青蛙跳10级台阶有"+frog(10)+"种跳法");
}
public static int frog(int n) {
if (n == 1 || n == 2) {
return n;
}
return frog(n - 1) + frog(n - 2);
}
}
这篇博客介绍了青蛙跳台阶问题,通过分析得出其解决方案与斐波那契数列的关系。给出了循环和递归两种代码实现方式。
1631

被折叠的 条评论
为什么被折叠?



