• 斐波那契数列两种算法的时间复杂度


    这是2018王道数据结构考研复习指导的第一章思维拓展的题目。

    关于斐波那契数列的简介:

      斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

    具体题目:

    求解斐波那契数列的F(n)有两种常用算法:递归算法和非递归算法。试分析两种算法的时间复杂度。

    1.递归算法

     1 #include<iostream>
     2 using namespace std;
     3 
     4 long Fibonacci(int n) {
     5     if (n == 0)
     6         return 0;
     7     else if (n == 1)
     8         return 1;
     9     else
    10         return Fibonacci(n - 1) + Fibonacci(n-2);
    11 }
    12 
    13 int main() {
    14     cout << "Enter an integer number:" << endl;
    15     int N;
    16     cin >> N;
    17     cout << Fibonacci(N) << endl;
    18     system("pause");
    19     return 0;
    20 }

    时间复杂度分析:

      求解F(n),必须先计算F(n-1)和F(n-2),计算F(n-1)和F(n-2),又必须先计算F(n-3)和F(n-4)。。。。。。以此类推,直至必须先计算F(1)和F(0),然后逆推得到F(n-1)和F(n-2)的结果,从而得到F(n)要计算很多重复的值,在时间上造成了很大的浪费,算法的时间复杂度随着N的增大呈现指数增长,时间的复杂度为O(2^n),即2的n次方

    2.非递归算法

     1 #include<iostream>
     2 using namespace std;
     3 
     4 long Fibonacci(int n) {
     5     if (n <= 2)
     6         return 1;
     7     else {
     8         long num1 = 1;
     9         long num2 = 1;
    10         for (int i = 2;i < n - 1;i++) {
    11             num2 = num1 + num2;
    12             num1 = num2 - num1;
    13         }
    14         return num1 + num2;
    15     }
    16 }
    17 
    18 int main() {
    19     cout << "Enter an integer number:" << endl;
    20     int N;
    21     cin >> N;
    22     cout << Fibonacci(N) << endl;
    23     system("pause");
    24     return 0;
    25 }

    时间复杂度分析:

       从n(>2)开始计算,用F(n-1)和F(n-2)两个数相加求出结果,这样就避免了大量的重复计算,它的效率比递归算法快得多,算法的时间复杂度与n成正比,即算法的时间复杂度为O(n).

    参考博客:http://www.cnblogs.com/python27/archive/2011/11/25/2261980.html

  • 相关阅读:
    C语言寒假大作战01
    C语言|博客作业12-学期总结
    第一次作业
    C语言|博客作业11
    C语言|博客作业10
    Centos7上安装 sqlmap 所经历的坑
    软件工程1916|W(福州大学)_助教博客】助教总结
    软件工程1916|W(福州大学)_助教博客】个人总结作业(第12次)成绩公示
    团队作业第五次(第8次)—项目系统设计与数据库设计成绩排名
    需求分析课堂答辩问题汇总
  • 原文地址:https://www.cnblogs.com/abyss1114/p/7272657.html
Copyright © 2020-2023  润新知