Loading

斐波那契算法

斐波那契数学公式
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;
}
posted @ 2020-08-08 10:11  codeduck  阅读(327)  评论(0编辑  收藏  举报