zoukankan      html  css  js  c++  java
  • 斐波那契算法

    斐波那契数学公式
    image-20200808101156483
    算法问题:青蛙跳台阶

    一直青蛙一次可以跳上 1 级台阶,也可以跳上二级台阶。

    求该青蛙跳上一个 n 级台阶总共有多少中跳发。

    解:

    1. 若只有一层台阶,则只有一种跳法
    2. 若有两层台阶,则有两种跳法

    把 n 级台阶看作为 n 的函数,记为 f ( n ), 当 n > 2 时,第一次跳有两种不同的选择

    1. 只跳一层,则剩下的跳法数目等于 n - 1 级台阶的跳法数目
    2. 跳两层,则剩下的跳法数目等于 n - 2 级台阶的跳法数目

    因此 n 级台阶的不同跳法的总数为:

    f(n) = f(n-1) + f(n+1)

    算法实现方式

    1. **递归实现: **时间效率低
    public static long fibonacci(int n){
        if ( n <= 0){
            return 0;
        }
        if (n == 1){
            return 1;
        }else if (n == 2){
            return 2;
        }
    
        return fibonacci(n-1) + fibonacci(n - 2);
    }
    
    1. 循环实现:提升时间效率
    public static long f(int n) {
         
         int[] result = {0, 1, 2};
         if (n < 0) {
             return 0;
         }
    
         if (n < 3) {
             return result[n];
         }
    
        /**
         * firstNum = f(n - 1)
         * lastNum = f(n - 2)
         */
         int lastNum = result[1];
         int firstNum = result[2];
         int num = 0;
         for (int i = 3; i <= n; i++) {
             num = firstNum + lastNum;
             lastNum = firstNum;
             firstNum = num;
         }
         return num;
    }
    
  • 相关阅读:
    62 ip与int类型的转换
    60再谈指针
    59任由制转换
    58进制转换工具
    吉哥工作
    apple
    找第一个非0元素的位置
    若干个数据之和 不考虑溢出
    汇编程序w=x*y+z-200
    4位bcd数转换为2进制数
  • 原文地址:https://www.cnblogs.com/code-duck/p/13456592.html
Copyright © 2011-2022 走看看