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);
    }

  • 相关阅读:
    Codevs P1501二叉树的最大宽度和高度
    react 脚手架使用
    vue 学习七 组件上使用插槽
    vue 学习 cli3常用配置
    vue 学习五 深入了解components(父子组件之间的传值)
    vue 学习四 了解组件
    vue 学习二 深入vue双向绑定原理
    vue 学习一 组件生命周期
    vscode 常用插件
    解决在移动端上 click事件延迟300 毫秒的问题 fastclick.js
  • 原文地址:https://www.cnblogs.com/apeway/p/10758949.html
Copyright © 2011-2022 走看看