跳台阶问题解析

发布时间 2023-07-26 11:00:46作者: 时间羚羊

描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

数据范围:1 \leq n \leq 401≤n≤40
要求:时间复杂度:O(n)O(n) ,空间复杂度: O(1)O(1)
示例1
输入:2
返回值:2
说明:
青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。因此答案为2
示例2
输入:7
返回值:21

 

递归解法:

public int jumpFloor (int number) {
        if(number <= 1) {
            return 1;
        }
        return jumpFloor(number - 1) + jumpFloor(number - 2);
    }

为什么f(n-1)+f(n-2)是答案,因为达到n级台阶,是 从n-1到达n级台阶所有可能 加上 从n-2到达n-1级台阶的所有可能。

深度思考就能知道,最多步数 是全为1跳台阶,然后其中两个1合并为2步数就会按1递减,也就是5阶 需要5+4+3+2+1,4阶需要4+3+2+1,正好符合斐波那契数列计算方式。所以这个递归公式只适合跳一阶或跳二阶的方式,如果包含跳三阶就不行了。