算法复习:斐波那契数列

来源:互联网 发布:数据库开发模式 编辑:程序博客网 时间:2024/06/07 05:10

递归实现:

public static int fibonacci(int n){      if(n <= 2){          return 1;      }else{          return fibonacci(n-1) + fibonacci(n-2);      }  }  

时间复杂度:O(2^(N/2))<=T(N)<=O(2^N)

特点:

效率很低,例如我们要求fibonacci(10),那么我们需要先求fibonacci(8)和fibonacci(9),同样,要求fibonacci(9),就要求fibonacci(8)和fibonacci(7),这样我们就重复求了fibonacci(8)。随着n的增大重复的节点急剧增大。


非递归实现:

 public static int fibonacci(int n){      if(n <= 2)         return 1;      int fibNMinusOne = 1;    int fibNMinusTwo = 0;    int fibN = 0;    for(int i = 2;i <= n;i++){        fibN = fibNMinusOne + fibNMinusTwo;        fibNMinusTwo = fibNMinusOne;        fibNMinusOne = fibN;        }    return fibN;}  

时间复杂度:O(N)


相关算法题:

  • 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
原创粉丝点击