青蛙跳台阶一阶、两阶,求n阶的台阶一共几种跳法

青蛙跳台阶一阶、两阶,求n阶的台阶一共几种跳法

题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
思路:

得到n个台阶,一共可以跳多少个2步,这个也是一个斐波那契数列的一个应用。对于本题前提只有一次跳一阶,和跳两阶。如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n - 1)假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n - 2)那么这个时候就能够得到总的跳法为 f(n) = f(n - 1) + f(n - 2),然后这个出口就是:只有一阶的时候f(1) = 1, 只有两阶的时候f(2) = 2;

递归实现:效率比较差

 public int JumpFloor(int target) {       
       if(target == 1){
            return 1;
        }
        if(target == 2){
            return 2;
        }
        //第一次有两种选择,然后根据不同的选择,然后开始不同的下一步,但是下一步还是一样有两种选择
        return JumpFloor(target - 1) + JumpFloor(target - 2);
}

非递归实现:

 public int JumpFloor(int target) {
        int x=1, y=2, z;
        if(target == 1){
            return 1;
        }
        if(target == 2){
            return 2;
        }
        for(int i = 3; i <= target; i ++){
            z = y;
            y = x + y;
            x = z;
        }
        return y;

    }

 上一篇
按照顺时针的顺序,逐层遍历并打印N阶方阵 按照顺时针的顺序,逐层遍历并打印N阶方阵
按照顺时针的顺序,逐层遍历并打印N阶方阵问题 逆时针打印矩阵,输入一个矩阵,按照从外向里逆时针的顺序打印出每一个数字。 输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输出:1 2 3 4 8 12 1
2019-02-15
下一篇 
拍平二叉树 拍平二叉树
拍平二叉树问题 这个题目说的是,给你一棵二叉树,你要将它拍平,使得每个节点都只有右子树,并且拍平后的二叉树从上到下的节点是原二叉树前序遍历的结果。 比如说,给你的二叉树是: 0 / \ 1 2 /
2019-02-13
  目录