逆推法求解N级阶梯问题

作者: 小虫巨蟹 | 来源:发表于2017-02-27 12:29 被阅读91次

所谓逆推,即:从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件

问题

有一条总共N级的阶梯,一步可以跨一级,也可以跨两级,请问走完这N级阶梯总共要多少总走法?

分析

惯常思维,顺序迭代,第一步可以一级也可以两级,在两个分支中第二步可以一级也可以两级,第三步...
如此反复,我不相信你不凌乱

lin.jpg

但是如果以目标为导向往前推,走到第n级的时候,有可能是从n-1级过来的,也有可能是从n-2级过来的,那么问题可以分解为从f(n-1)和f(n-2),可以用公式表示之后,问题是不是清晰很多了

为什么会这样呢?设n=3,那么我们把所有的可能画成一棵树(数字表示阶梯的编号):

tree.png

顺推相当于你要从叶子节点去画一棵树,而逆推相当于从根节点去画一棵树,这还是n=3的情况,n=10的时候如果你不凌乱的话那可以去最强大脑了

要诀:

  1. 枚举的问题多半与树有关,多往这想想
  2. 顺推不行的时候,换一个方向,从目标往回推试试

js代码实现

    function showSteps(n, array) {
        array.unshift(n);
        if(n > 2) {
            //必须重新复制数组,否则各路径应用的相同的内存地址,相互污染
            showSteps(n-1, array.slice());
            showSteps(n-2, array.slice());
        } else {
            console.log('***************数字代表阶梯的编号*******************');
            console.log(array);
        }
    }

    showSteps(5, []);

相关文章

  • 逆推法求解N级阶梯问题

    所谓逆推,即:从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件 问题 有一条总共N级的阶梯,一步可以跨...

  • 第4章 减治法

    减治法 基本思想:将规模为n的问题递减为规模为n-1(减常数)或n/2(减因子)的子问题,反复递减后对子问题求解,...

  • 线性系统和矩阵的逆_线性代数_day35

    求矩阵的逆 化成求解线性方程 只有唯一解 最终求出结果 使用增广矩阵,高斯约旦消元法来求解矩阵的逆 矩阵的逆不可能...

  • 第四章 分治策略

    暴力求解法 我们可以穷举所有的买入卖出组合,效率是n的平方 问题转换 使用分治法求解 我们来看下跨域中电的情况 矩...

  • leetcode 刷题初体验

    开始喜欢上刷题,也愿意在一个问题上不断寻求最优解比如求最大子序和这道题从O(n2)到O(n)再到分治法求解(分治法...

  • 枚举算法之最大素数

    问题:求解(0,N)中的最大素数

  • 数值计算day4-求解线性方程组(下)

    上节课主要介绍了线性方程组的几种直接求解法,包括高斯消去法(主元消去)、高斯约当法(可以用来求解矩阵的逆)、LU分...

  • 解决问题的顺推逆推法

    分析解决问题的思考框架有很多,之前我总结分享了分析解决问题的5D法,今天再给大家分享两种更简易的方法,即顺推法和逆...

  • 第5章 分治法

    分治法 将规模为N的问题分解为k个规模较小的子问题,使这些子问题相互独立可分别求解,再将k个子问题的解合并成原问题...

  • python实现leetcode之70. 爬楼梯

    解题思路 假设到n阶的方法数为f(n)最后一步怎么走?有两种方式: 1.走一级阶梯,共有f(n-1)种走法2.走两...

网友评论

本文标题:逆推法求解N级阶梯问题

本文链接:https://www.haomeiwen.com/subject/ttdzwttx.html