zoukankan      html  css  js  c++  java
  • 跳台阶和变态跳台阶

    跳台阶

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
     1 public class Main08 {
     2 
     3     /*
     4      * 一只青蛙一次可以跳上1级台阶,也可以跳上2级。
     5      * 求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
     6      */
     7     
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         int num = Main08.JumpFloor(4);
    11         System.out.println(num);
    12     }
    13     
    14     public static int JumpFloor(int target) {
    15         if(target == 1) {
    16             return 1;
    17         }
    18         if(target == 2) {
    19             return 2;
    20         }
    21         
    22         return JumpFloor(target-1) + JumpFloor(target-2);
    23     }
    24 
    25 }

    变态跳台阶

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
     1 /*
     2  * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求
     3  * 该青蛙跳上一个n级的台阶总共有多少种跳法。
     4  */
     5 
     6 import java.util.Scanner;
     7 
     8 public class Main09 {
     9 
    10     public static void main(String[] args) {
    11         // TODO Auto-generated method stub
    12         Scanner sc = new Scanner(System.in);
    13         int target = sc.nextInt();
    14         int times = Main09.JumpFloorII(target);
    15         System.out.println(times);
    16     }
    17     
    18     public static int JumpFloorII(int target) {
    19         if(target == 0) {
    20             return 0;
    21         }
    22         if(target == 1) {
    23             return 1;
    24         }
    25 
    26         return 2*JumpFloorII(target-1);
    27     }
    28 
    29 }

    这两道题目都是斐波那契数列的扩展。

    跳台阶:每一次只能跳1阶或者2阶;

    所以F(1) = 1;

    F(2) = F(2-1) + F(2-2);  ----------→ F(2-1) :青蛙第一次跳了一个台阶后的情况。 举例排列的话就是 1 x, x 为 1。 F(2-2):青蛙第一次跳了两个台阶的情况。举例排列的话就是 2 。

    F(3) = F(3-1) + F(3-2); ----------→ F(3-1):青蛙第一次跳了一个台阶后的情况。F(3-2):青蛙第一次跳了两个台阶的情况。  。。。。。以此类推。

    F(n) = F(n-1) + F(n-2); 

    变态跳台阶:每一次只能跳1阶或者2阶或者3阶.......n阶。

    F(1) = 1;

    F(2) = F(2-1) + F(2-2);  ----------→ F(2-1) :青蛙第一次跳了一个台阶后的情况。 举例排列的话就是 1 x, x 为 1。 F(2-2):青蛙第一次跳了两个台阶的情况。举例排列的话就是 2 。

    F(3) = F(3-1) + F(3-2) + F(3-3); ----------→ F(3-1):青蛙第一次跳了一个台阶后的情况。F(3-2):青蛙第一次跳了两个台阶的情况。  。。。。。以此类推。

    ............

    F(n-1) = F(n-2) + F(n-3) + ......+ F(1) + F(0); 

    F(n) = F(n-1) + F(n-2) + ......+ F(1) + F(0);

    根据F(n-1)的表达式和F(n) 的表达式 我们可以轻松的推出:F(n) = 2 * F(n-1);   这样就得到了 我们的迭代表达式。

  • 相关阅读:
    MyBatis学习之输入输出类型
    MyBatis学习之多表查询
    javascript学习之this
    Elasticsearch学习之Java操作1
    CSS学习之定位
    CSS学习之浮动
    CSS学习之盒子模型
    java学习之导出Excel
    转载:手把手教你做iOS推送
    拳头公司聊天服务架构:服务器篇
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11000466.html
Copyright © 2011-2022 走看看