• 腾讯面试题:50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法


    有个同学去了腾讯,他说面试时有这么一道思维题:50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?

    费波拉希数列:

     peter的方法虽然不能求得50层的次数,但是可以求得前30多层。依次如下:

    一共1个台阶的话有1种走法.

    一共2个台阶的话有2种走法.

    一共3个台阶的话有3种走法.

    一共4个台阶的话有5种走法.

    一共5个台阶的话有8种走法.

    一共6个台阶的话有13种走法.

    一共7个台阶的话有21种走法.

    一共8个台阶的话有34种走法.

    一共9个台阶的话有55种走法.

    一共10个台阶的话有89种走法.

    一共11个台阶的话有144种走法.

    一共12个台阶的话有233种走法.

    一共13个台阶的话有377种走法.

    一共14个台阶的话有610种走法.

    一共15个台阶的话有987种走法.

    一共16个台阶的话有1597种走法.

    一共17个台阶的话有2584种走法.

    一共18个台阶的话有4181种走法.

    一共19个台阶的话有6765种走法.

    一共20个台阶的话有10946种走法.

    一共21个台阶的话有17711种走法.

    一共22个台阶的话有28657种走法.

    一共23个台阶的话有46368种走法.

    一共24个台阶的话有75025种走法.

    一共25个台阶的话有121393种走法.

    一共26个台阶的话有196418种走法.

    一共27个台阶的话有317811种走法.

    一共28个台阶的话有514229种走法.

    一共29个台阶的话有832040种走法.

    一共30个台阶的话有1346269种走法.

    一共31个台阶的话有2178309种走法.

    一共32个台阶的话有3524578种走法.

    一共33个台阶的话有5702887种走法.

    一共34个台阶的话有9227465种走法.

    一共35个台阶的话有14930352种走法.

    ......

    这不正是个费波拉希数列!!!!

     知道这个数学规律就好办了。代码如下:

    function fib(n) {
                return function(n, a, b) {
                    return n > 0 ? arguments.callee(n - 1, b, a + b) : a;
                } (n, 0, 1);
            }
            fib(0); //0
            fib(1); //1
            fib(2); //1
            fib(3); //2
            fib(4); //3
            //......
            fib(50); //12586269025
            fib(51); //20365011074,这里是上到第50个阶梯


      

    function  GetStepNum( $n)
    {
          if($n<1)  return 0;
          if($n==1) return 1;
          if($n==2) return 2;
          if($n>2)
                return GetStepNum($n-1)+GetStepNum($n-2);
    }
    echo GetStepNum(10);
    

      

  • 相关阅读:
    NOIP200801 ISBN号码
    NOIP200902分数线划定
    NOIP200901多项式输出
    NOIP200603 Jam的计数法
    HDNOIP201102读数
    Modular Inverse(扩展欧几里得)
    青蛙的约会(扩展欧几里得)
    A Famous City(单调栈)
    Triangles
    2971: 魔族密码 (trie树)
  • 原文地址:https://www.cnblogs.com/huanxiyun/p/5474157.html
Copyright © 2020-2023  润新知