• 累死青蛙系列——青蛙跳台阶问题


    (1)斐波那契数列

    f(1) = 1

    f(2) = 2

    f(n) = f(n-1) + f(n-2)

    function Fibonacci(n)
    {
        // write code here
        var a=[0,1];
        if(n>1){
            for(var i=2;i<=n;i++){
                a[i]=a[i-1]+a[i-2];
            }
        }
        return a[n];
    }

    (2)青蛙跳台阶

    青蛙每次只能跳1个或2个台阶,有n阶台阶,青蛙有多少种跳法?

     这要倒过来想,当在第n阶台阶的前一步时,青蛙只有两种选择,1或2步,f(n) = f(n-1) + f(n-2)

    这样就将题目转变成斐波那契数列了。

    function jumpFloor(number)
    {
        // write code here
        if(number<=0){
            return -1;
        }else if(number==1){
            return 1;
        }else if(number==2){
            return 2;
        }else{
            return jumpFloor(number-1)+jumpFloor(number-2);
        }     
    }

     

    (3)变态青蛙跳台阶

    青蛙每次能跳1个或2个,……n个台阶,有n阶台阶青蛙有多少种跳法?

    这题同样可以倒过来考虑

    f(n) = f(n-1) + f(n-2) + ……+f(2) +f(1) +f(n-n)

    但是这样不容易找到规律。所以我们这次采取从正面开始。

                                   f(1) = 1

                        f(2) = f(2-1) + f(2-2) = 2f(1) = 2 ; 需要假设 f(0) 次为1,其意义为 :有n阶台阶,青蛙采取直接跳了n个台阶的策略

                              f(3) = f(3-1) + f(3-2) + f(3-3) = 2f(2) = 4;

                 f(4) = f(4-1) + f(4-2) + f(4-3) + f(4-4) = 2f(3)  = 8;

    大胆假设一下,f(n) = 2f(n-1) 这样是为了通过递归获取答案

    function jumpFloor(number){
        if(number==0 || number ==1){
            return 1;
        }else{
            return jumpFloor(number-1)*2;
        }
    }
  • 相关阅读:
    Requests将verify设置为False后取消警告的方式
    pandas处理Excel数据的应用
    移除Selenium中的 window.navigator.webdriver
    python中math模块常用的方法整理
    Numpy、pandas、Matplotlib
    osgEarth
    Nginx 代理本地文件夹(Windows环境)
    windows下nginx的安装及使用
    OSG入坑之路[转]
    ubuntu16.04下NVIDIA GTX965M显卡驱动PPA安装
  • 原文地址:https://www.cnblogs.com/hiluna/p/9387599.html
Copyright © 2020-2023  润新知