[算法学习]斐波那契数计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[算法学习]斐波那契数计算相关的知识,希望对你有一定的参考价值。

问题描述: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

分析:
这里有两种解法,一种是用递归,一种使用循环。用递归的解法看起来很很简单,只需几行的代码就可以搞定,但是却隐藏着巨大的空间消耗和时间 消耗 。一种使用循环来做,写起来有点难看,至少没递归写起来好看,但是却比递归效率更高,几乎没有内存消耗。


代码思路

(1). 递归。代码如下(时间复杂度是指数级!大约是(5/3)^N,N很大的时候StackOverflowError,应该是存放递归方法的栈空间溢出):

  1. public static int getFibonacci(int n)
  2. {
  3. if(n<1)
  4. {
  5. return 0;
  6. }
  7. if(n==1||n==2)
  8. {
  9. return 1;
  10. }
  11. return getFibonacci1(n-1)+getFibonacci1(n-2);
  12. }

(2). 循环。代码如下(时间复杂度是O(N)):

  1. public static int getFibonacci(int n)
  2. {
  3. if(n<1)
  4. {
  5. return 0;
  6. }
  7. if(n==1||n==2)
  8. {
  9. return 1;
  10. }
  11. int sum=0;
  12. int sum1=1;int sum2=1;
  13. for(int i=3;i<=n;i++)
  14. {
  15. sum=sum2+sum1;
  16. sum1=sum2;
  17. sum2=sum;
  18. }
  19. return sum;
  20. }




以上是关于[算法学习]斐波那契数计算的主要内容,如果未能解决你的问题,请参考以下文章

算法动态规划 - 斐波那契数

次线性时间内的第 n 个斐波那契数

Java与算法之 - 斐波那契数列

斐波那契数

17. 计算斐波那契数(非递归方法)

算法--斐波那契数(YZBB)