题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
这是一个递归求解的问题。
我们先来分解父问题,不妨以最后一步跳了几级为划分依据:
- 跳了1级,即青蛙先跳到第n-1级,再跳1级,该种情况下,跳法总数等同于青蛙跳到n-1级的跳法总数;
- 跳了2级,即青蛙先跳到第n-2级,再跳2级,该种情况下,跳法总数等同于青蛙跳到n-2级的跳法总数。
由于青蛙只可能跳1 or 2级,所以青蛙跳到n级的跳法总数是以上两种情况之和,递推公式为:
JumpFloor(n) = JumpFloor(n-1) + JumpFloor(n-2);
既然是递归问题的求解,一个最重要的不能忽视的问题,就是递归的结束条件。
(最好在进行这一步的考虑时,将异常情况的处理也包括进去)
负数、0如何处理?
跳一级台阶的跳法数是否可以确定?跳两级台阶呢?
确定了这些初始值,我们才能放心的使用我们的递推公式求解,剩下的就全交给程序就好了,这其实也正是递归的魅力所在。
题解
public class Solution {
public int JumpFloor(int target) {
if(target<0)
return -1;
else if(target==0)
return 0;
else if(target==1)
return 1;
else if(target==2)
return 2;
else
return JumpFloor(target-1)+JumpFloor(target-2);
}
}