zoukankan      html  css  js  c++  java
  • 9 其它算法

    1 青蛙跳台阶

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

    算法思想 当 n = 1,只有 1 中跳法;当 n = 2 时,有 2 种跳法;当 n = 3 时,有 3 种跳法;当 n = 4 时,有 5 种跳法;当 n = 5 时,有 8 种跳法;.......规律类似于 Fibonacci 数列:

    1 public static int fib(int n)
    2 {
    3     if(n <= 2)
    4         return n;
    5     return fib(n - 1) + fib(n - 2);
    6 }
    递归代码

    我们对递归代码进行优化,因为递归代码中有太多的重复运算。所以,我们考虑使用变量保存住中间结果。

     1 public static int floor(int n)
     2 {
     3     if(n <= 2)
     4         return n;
     5     int n1 = 1;
     6     int n2 = 2;
     7     int sum = 0;
     8     for(int i = 3; i <= n; i++)
     9     {
    10         sum = n1 + n2;
    11         n1 = n2;
    12         n2 = sum;
    13     }
    14     return sum;
    15 }
    算法描述

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

    • 在第 n - 1 级一步跳到n级,有f(n-1)种;
    • 在第 n - 2 级一步跳到n级,有f(n-2)种;
    • 在第 n - 3 级一步跳到n级,有f(n-3)种;
    • 。。。。。。
    • 在第 1 级一步跳到n级,有f(1)种;
    • f(n)=f(n-1)+f(n-2)+f(n-3)+···+f(1)
    • f(n-1)=f(n-2)+f(n-3)+···+f(1)
    • 推出f(n)=2*f(n-1)
     1 public static int floor(int n)
     2 {
     3     if(n <= 2)
     4         return n;
     5     int n = 2;
     6     int sum = 0;
     7     for(int i = 3; i <= n; i++)
     8     {
     9         sum = 2 * n;
    10         n = sum;
    11     }
    12     return sum;
    13 }
    算法描述
  • 相关阅读:
    XML学习教程
    JSON 的含义?
    局域网共享问题全方位解决
    VMware虚拟化培训手册
    信息化建设中的IT规划精要
    洛谷1265 公路修建
    洛谷1144 最短路计数
    NOI题库05 派
    NOI题库7624 山区建小学(162:Post Office / IOI2000 POST OFFICE [input] )
    vijosP1014 旅行商简化版
  • 原文地址:https://www.cnblogs.com/sketeton/p/11694126.html
Copyright © 2011-2022 走看看