zoukankan      html  css  js  c++  java
  • 【算法习题】青蛙跳台阶

    习题1、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

             思路分析:跳上第n级台阶的最后一跳只存在两种情况(跳1级或2级),一种是从第n-1级跳1级到第n级,另一种是从第n-2级跳2级到第n级。假如我们用f(n)代表青蛙跳上一个n级的台阶的跳法总数,则当n要大于2时有f(n) = f(n-1) + f(n-2),原来这是一个裴波那契数列求和问题,代码如下。

    public static int jump(int n) { // n: 大于等于0的整数
         int[] fib = { 0, 1, 2 };
         if (n <= 2) {
             return fib[n];
         }
         return jump(n - 1) + jump(n - 2);
    }

    习题2、一只青蛙一次可以跳上任意级的台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。 

    思路分析:跳上第n级台阶的最后一跳存在n种情况(跳1级、或2级、……、或n级),第一种是从第n-1级跳1级到第n级,第二种是从第n-2级跳2级到第n级,第n种是从第0级跳n级到第n级。假如我们用f(n)代表青蛙跳上一个n级的台阶的跳法总数,则f(n) = f(n-1) + f(n-2)+……+f(0)。先通过数学推理得到公式,然后就容易写代码了。

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

    >> f(n+1) = f(n) + f(n-1)+……+f(0)

    >> f(n+1)-f(n) = (f(n) + f(n-1)+……+f(0)) – (f(n-1) + f(n-2)+……+f(0))

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

    public static int jump2(int n) { // n: 大于等于0的整数
        if (n == 0)
            return 0;
        if (n == 1)
            return 1;
        return 2 * jump2(n - 1);
    }

  • 相关阅读:
    [ACM] hdu 1166 敌兵布阵 (线段树,单点更新)
    [ACM] poj 1182 食物链(并查集)
    [ACM] hdu 1272 小希的迷宫(并查集)
    [ACM] hdu 1198 Farm Irrigation (看图枚举+并查集)
    [ACM] 携程预赛第二场 剪刀石头布(并查集)
    [ACM] hdu 1241 Oil Deposits(DFS)
    Jerry Mouse
    [2010山东ACM省赛] Balloons(搜索)
    java作业不能运行
    sql 语句
  • 原文地址:https://www.cnblogs.com/apeway/p/10758949.html
Copyright © 2011-2022 走看看