当遇到求解有多少种类型的数字相加等于n的问题时,如一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
可以先从低层台阶找到规律:
1层台阶:1种
2层台阶:2种
3层台阶:4种
4层台阶:8种
......
我们发现每增加一层台阶,其中当层的跳法是上一层的2倍
则有f(n) = 2f(n-1)

如果不采用推断规律的方法,我们也可以考虑采用数学的方法推断:
f(n)=f(n-1)+f(n-2)+……f(1)
f(n-1)=f(n-2)+……f(1)
两式相减则有: f(n)=2f(n-1)

这个式子如果不好理解,我们可以采用普通跳台阶的题目进行回答:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
那么想跳到 n 层的台阶的时候,必然是已经跳到了 n-1 层 或者 n-2 层,此时只要再进行一步就能跳到 n 层
那么则有f(n) = f(n-1) + f(n-2)

同理对于不限制跳台阶,则有f(n)=f(n-1)+f(n-2)+……f(1),此时需要一些数学功底的变换,才能获得上述结论。
下面给出代码:

public class Solution {
    public int JumpFloorII(int target) {
        if(target == 0 || target == 1){return target;}
        return 2 * JumpFloorII(target - 1 );        
    }
}