题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
1.跳第一级台阶有一种方法,跳第二级台阶有两种方法。
跳第n级台阶(n>=3)f(n),可以跳到第n-1级台阶f(n-1),或者第 n-2级台阶f(n-2),也就是可以有f(n)=f(n-1)+f(n-2)
2.本质是斐波那契数列0,1,1,2,3,5,8,13……
可以发现f1=1,f2=2,f3=3,f4=5,即从第三级台阶开始,每一级的方法数等于前两级台阶方法的总和。
Solution
//递归
public static int JumpFloor(int target) {
if (target <= 2)
return target;
else
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
//非递归
public static int JumpFloor(int target) {
int fn = 1;
int f1 = 1;
int f2 = 1;
for (int i = 1; i < target; i++) {
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
return fn;
}

本文详细解析了青蛙跳台阶问题,这是一个经典的动态规划问题。文章首先介绍了问题的背景,然后通过递归和非递归两种方法给出了解决方案。递归方法直观但效率较低,而非递归方法则利用了动态规划的思想,提高了计算效率。最后,文章指出该问题的本质是斐波那契数列。
172万+

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



