JAVA剑指offer编程练习:跳台阶和变态跳台阶(递归)

1.跳台阶
(1)题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
(2)解题思路
相当于斐波那契序列,跳1级台阶,只有1种方法;跳2级台阶,有2种方法;跳3级台阶,有3种方法;跳4级台阶,有5种方法,依次下去,跳一个n级的台阶的方法数是跳n-1级台阶的方法数与跳n-2阶台阶的方法数的总和。
(3)代码

public class Solution {
    public int JumpFloor(int target) {
        if(target<=0){
            return 0;
        }
        if (target>0&&target<=3){
            return target;
        }
        return JumpFloor(target-1)+JumpFloor(target-2);
    }
}

2.变态跳台阶
(1)题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
(2)解题思路
当跳1级台阶时,f(1) = 1;
当跳2级台阶时,f(2) = f(1) + 1 = 2;
当跳3级台阶时,f(3) = f(2) + f(1) + 1 = 4;
当跳4级台阶时,f(4) = f(3) + f(2) + f(1) + 1 = 8;
以此类推:
f(n) = f(n-1) + f(n-2) +…+ f(2) + f(1) + 1
f(n-1) = f(n-2) +…+ f(2) + f(1) + 1
做减法:
–> f(n) - f(n-1) = f(n-1)
–>f(n) = 2 * f(n-1)
(3)代码

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

你可能感兴趣的:(JAVA)