zoukankan      html  css  js  c++  java
  • 爬楼梯问题

           最近看到很有意思的一道题目,问的是☞有一座高度10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。例如,每次走1级台阶,一共走10步,这是其中一种走法;或者每次垮两级台阶,一共走5步;and so on.问一共有多少种走法。

          当楼梯级数很小时,凭借我们大脑弱小的计算能力,可以很快的得出答案。例如台阶数为1时,当然只有一种方法;台阶数为二时,有两种方法(11或2);台阶数为三时,有三种方法(111,12,21)。再随着台阶数的增长,我们会惊奇的发现☞天呐!我的脑子越来越不够用了?!

           这时就需要我们借助人类的好朋友好伙伴~~>计算机,帮我们解答。但问题来了,我们该怎么告诉它我们的需求呢?相信很多小伙伴一定想说,"反正电脑算的快,我们利用排列组合的思想,告诉它用多层嵌套循环遍历出所有可能!"Bingo,这样是可行的!!!但是请不要虐待电脑,因为它们是我们的好朋友好伙伴!!

            今天小编就要和大家balabala怎么样利用函数重入(递归)来化腐朽为神奇!

           小编有一个习惯,就是看一本书的时候如果发现从前往后不爽的时候,会换个姿势从后往前!这样换个姿势再来一遍,会发现不一样的风景!!!就拿这个问题来说,如果台阶有20级,如果从前往后干,你慢慢从垮一级或两级,再垮一级或两级直至跨到20级,相信你可怜的脑子是算不过来的。但假如我们设想现在到了最后一步(到了第18级台阶,再跨2级到就到第20级台阶了;或到了19级再跨1级到20级),那么,到达20级台阶的方法数Mehod(20)是不是就等于Method(19)+Method(18)?好,如果答案是肯定的,那么我们可不可以归纳出Method(N)=Method(N-1)+Method(N-2)这就是我们得出的状态转移关系!

            如果要想这个递归结束,我们还需要一个状态结束条件(边界条件)。这个简单☞Method(1)=1;Method(2)=2

        万事具备,只欠东风!东风就是用编程语言告诉计算机,它该怎么做。请看小编用C语言怎么和它说的

    6217760-e48adcb306a69909.jpg
    codes of steps

    6217760-108b4bc92f0a6fdb.jpg

    注:更多有趣问题,请关注leon_Geo
    more funning questions,please locate "leon_Geo"

  • 相关阅读:
    Javajdbc
    Web Project添加Struts2框架
    CSS去除免费虚拟主机的广告心得分享
    List<T>采用delegate快速实现排序、查找等操作
    ASP.NET视频采集站核心技术分析(附送对付搜索引擎蜘蛛的贱招)
    Azure完整实例:在线日程表
    [发布]ClouderaCMS: 基于Windows Azure的开源CMS
    获取配置文件节点的值
    asp.net DataGrid排序
    checkbox 获取选中的值
  • 原文地址:https://www.cnblogs.com/leon1124/p/14039890.html
Copyright © 2011-2022 走看看