30.斐波那契数列

简介: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

题目描述

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。


n<=39


解法1:递归


缺点:需要保存中间重复参数,运算量大


class Solution {

public:

   int Fibonacci(int n)

   {

     if(n<=0)

      return 0;

     if(n==1)

      return 1;

    return  Fibonacci(n-1) +Fibonacci(n-2);

   }

};

不通过:


运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。

case通过率为0.00%


缺点是:

7b252cc49eddde2620d6401c28300ec0_20190207222122263.png



需要计算很多的重复参数,例如上面涂颜色部分。


解法2:迭代  (递推)


O(n)的时间复杂度


class Solution {

public:

   int Fibonacci(int n)

   {

       int result[2]={0,1};

       int fibNMinusOne=1;

       int fibNMinusTwo=0;

       int fibN=0;

       if(n<2)

       {

           return result[n];

       }

       for(unsigned int i=2;i<=n;++i)

       {

           fibN=fibNMinusOne+fibNMinusTwo;

           fibNMinusTwo=fibNMinusOne;//上上次的fibN值

           fibNMinusOne=fibN;//上次的fibN值

       }

      return  fibN;

   }

};

类似动态规划?:


class Solution {

public:

   int Fibonacci(int n)

   {

       //vector<int> result[n+1];//vector 新建数组出错

       int * result=new int[n+1];//新建数组

       result[0]= 0;

       result[1]= 1;

       if(n<2)

       {

           return  result[n];

         

       }

       for(unsigned int i=2;i<=n;++i)

       {

         result[i]=result[i-1]+result[i-2];

       }

      return result[n];

   }

};

解法3: 待完善

O(logn)时间复杂度  涉及矩阵乘法

6db949762c79d9ce3b9d03d4c12a6608_20190207224954997.png


目录
相关文章
|
24天前
斐波那契数列
【10月更文挑战第19天】斐波那契数列。
22 3
|
2月前
|
Java
01_斐波那契数列
01_斐波那契数列
|
5月前
|
存储 算法
精益求精——斐波那契数列的logn解法
精益求精——斐波那契数列的logn解法
70 0
|
6月前
9.求斐波那契Fibonacci数列通项
9.求斐波那契Fibonacci数列通项
35 0
|
6月前
|
机器学习/深度学习 算法
|
6月前
生成斐波那契数列的几种不同的方法
生成斐波那契数列的几种不同的方法
90 0
(1188:1201:)斐波那契数列
(1188:1201:)斐波那契数列
147 0
|
机器学习/深度学习 开发工具
斐波那契数列的四种实现
在编程教程中提到斐波那契数列,通常都是用来讲解递归函数。当一个关于 N 的问题可以转换为关于 N - k 的同样问题时,它就可以尝试用递归的思路来解决。
斐波那契数列问题
斐波那契数列问题
99 0