# 青蛙跳台阶问题

# 1. 描述

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

台阶

# 2. 解题思路

没看过过这个题,很难想出用递归的方法。青蛙到第n个台阶有两种可能性第一是从n-1台阶条一个台阶,第二种是从第n-2个台阶跳两个台阶。到n-1个台阶也有两种可能性...以此类推,一直到第零个与第一个台阶需要跳一个。

n f(n) 备注
0 1
1 1
2 2 f(1) + f(0)
3 3 f(1) + f(2)
n f(n) f(n-1) + f(n-2)

# 3. 实现

(1)递归版

function numWays(n){
    if(n == 2 || n == 1 || n == 0) return n
    return numWays(n-1) + numWays(n-2)
}

(2)非递归版

var numWays = function (n) {
    var sum
    var a = 1
    var b = 1

    if (n < 2) return 1
    for (let i = 0; i < n - 1; i++) {
        sum = a + b
        [a,b] = [b,sum]
        // a = b
        // b = sum
    }

    return sum
};

来源: 剑指 Offer 10- II

更新时间: 12/26/2021, 1:44:08 PM