zoukankan      html  css  js  c++  java
  • 编程题:斐波那契数列青蛙跳台阶

    斐波那契数列

    又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)

    斐波那契数列涉及动态规划的思想,可以说是最简单标准的动态规划问题。若将下标下标n抽象为时间状态,那么斐波那契数列n刻的状态与n-1和n-2时刻的状态相关。

      /*斐波那契数列 n<=39*/
      public int Fibonacci(int n) {
          /* 使用迭代,效率极差
          if(n==0) return 0;
          if(n==1) return 1;
          return Fibonacci(n-1)+Fibonacci(n-2);
          */
          /*使用循环*/
          int a=0,b=1,c=1;
          if(n==0) return 0;
          if(n<3) return 1;
          for(int i=3;i<=n;i++){
              b=c;
              a=c-a;
              c=a+b;
    
          }
          return c;
      }

    跳台阶

    一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

    考察点:递归、动态规划、斐波那契数列

    思路:

    青蛙跳到第N个台阶的跳法与青蛙跳到第N-1和第N-2的跳法相关,是两者之和

    解题:

    设青蛙跳到第i个台阶的跳法为S[i]

    当i=0,S[i]=0

    当i=1,S[i] = 1

    当i>=2,S[i] = S[i-1]+S[i-2]

    /*青蛙跳台阶,可跳1阶或2阶,求跳到N阶的跳法有多少种*/
    /*跳到N阶的跳法=跳到N-1的跳法+跳到N-2的跳法*/
    /*类似斐波那契数*/
    public int JumpFloor(int target) {
         /*//递归耗费时间,虽然是递归的思想,但是使用递归消耗时间
        if(target<=2) return target;
        return JumpFloor(target-1)+JumpFloor(target-2);
        */
        if(target<=2) return target;
        int a=1,b=2;
        for(int i=3;i<=target;i++){
            b=a+b;
            a=b-a;
        }
        return b;
    
    }
    当你深入了解,你就会发现世界如此广袤,而你对世界的了解则是如此浅薄,请永远保持谦卑的态度。
  • 相关阅读:
    TCP建立连接和断开连接
    城市三级联动Springmvc+mysql
    JS页面间数据传递的各种方法
    点击Button弹出登陆注册框
    一个多表联合查询引发的思考
    Linq扩展方法获取单个元素
    Visual Studio 常见问题
    格式化asp.net mvc视图页面
    2014上半年度挑战回顾
    2014年上半度年度挑战
  • 原文地址:https://www.cnblogs.com/liwxmyself/p/14698985.html
Copyright © 2011-2022 走看看