跳台阶问题(二)

来源:互联网 发布:眼睛很亮女孩子知乎 编辑:程序博客网 时间:2024/06/06 09:43

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

class Solution {
public:
  int jumpFloorII(int number) {
     int count=0;
        if(number<=0)
            return count;
        else if(number==1)
            return 1;
        else if(number==2)
            return 2;
        else
            {
            for(int k=1;k<=number-1;k++)
                count+=jumpFloorII(number-k);
            count++;
            return count;
        }
  }
};

以下是我写的

public class Solution {
    public int JumpFloorII(int target) {
        int[] ans={0,1,2};
        int count=0;
        if(target<=2)
            return ans[target];
        
        else{
        for(int i=1;i<=target;i++)
            count+=JumpFloorII(target-i);
        count++;//+1表示加上一次跳n阶的跳法
        return count;
        }
    }
}


可以用递归和数学归纳法解。
设所求表达式为f(n)。上n阶台阶有这几种可能:一次上去,先走1,2,……,n-1阶。所以得到f(n)=1+f(1)+f(2)+\ldots +f(n-1)。这样用数学归纳法就可以证明f(n)=2^{n-1}



大概是以前我们学数学的时候,也只是递推式,公式怎么解而已。
却不知道这些公式放到现实生活中的含义。

今天我看f(n-1),不再只是f(n-1)

n代表n级台阶,1代表第一步跳一级台阶,而f(n-1)代表第一步跳一级台阶后剩下的跳法有多少种。

0 0
原创粉丝点击