题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
第一种思路
找规律:
target:0 1 2 3 4 .........
JumpFloor(int target): 0 1 2 3 5 .........
找规律是从第三个数器都符合f(n)=f(n-1)+f(n-2)
第二种思路
对于第一跳而言:
可以跳两个台阶也可以跳一个台阶,如果跳一个台阶,那么接下来青蛙将会有f(n-1)方式跳n-1个台阶。
如果跳两个台阶,那么接下来青蛙将会有f(n-2)跳n-2个台阶。
所以两种情况相加就是所有的要跳的台阶的情况。
对于这道题而言,每次跳跃都是分为两种情况,所以可以使用递归算法,因为每一次跳跃都是对上次跳跃算法的重复。
代码:
public class Solution {
public int JumpFloor(int target)
{
//分析,第一步跳一个台阶,则后面还有f(n-1)个台阶要跳
//第一步跳两个台阶,则后面还有f(n-2)个台阶要跳
//下一步的计算过程还是这样的,这很明显是一个递归问题。
if(target==0)
{
return 0;
}
if(target==1)
{
return 1;
}
if(target==2)
{
return 2;
}
return JumpFloor(target-1)+JumpFloor(target-2);
}
}