博客
关于我
斐波那契数列两种算法的时间复杂度
阅读量:556 次
发布时间:2019-03-09

本文共 1558 字,大约阅读时间需要 5 分钟。

斐波那契数列的递归算法和非递归算法的时间复杂度分析

斐波那契数列是一个经典的数列,其定义为F(0)=0,F(1)=1,当n≥2时,F(n)=F(n-1)+F(n-2)。本文将分析递归算法和非递归算法求解斐波那契数列的时间复杂度。

递归算法的时间复杂度分析

递归算法的代码如下:

#include 
using namespace std;long Fibonacci(int n) { if (n == 0) return 0; else if (n == 1) return 1; else return Fibonacci(n - 1) + Fibonacci(n - 2);}int main() { cout << "Enter an integer number: "; int N; cin >> N; cout << Fibonacci(N) << endl; system("pause"); return 0;}

递归算法的基本思路是通过不断递归地计算子问题来解决当前问题。然而,这种方法会导致大量的重复计算。例如,当计算F(n)时,需要先计算F(n-1)和F(n-2),而计算F(n-1)又需要计算F(n-2)和F(n-3),依此类推,直到计算到F(1)和F(0)。

这种重复计算导致了算法的时间复杂度呈指数增长,即O(2^n)。具体来说,计算F(n)会导致大约2^n - 1次函数调用。例如,如果要计算F(5),那么F(5)=F(4)+F(3),而F(4)=F(3)+F(2),F(3)=F(2)+F(1),F(2)=F(1)+F(0)。这意味着实际计算了9次F(n),大约是2*5 -1 =9次。

非递归算法的时间复杂度分析

非递归算法的代码如下:

#include 
using namespace std;long Fibonacci(int n) { if (n <= 2) return 1; else { long num1 = 1; long num2 = 1; for (int i = 2; i < n - 1; i++) { num2 = num1 + num2; num1 = num2 - num1; } return num1 + num2; }}int main() { cout << "Enter an integer number: "; int N; cin >> N; cout << Fibonacci(N) << endl; system("pause"); return 0;}

非递归算法通过迭代的方式逐步计算斐波那契数列中的每一个数,从而避免了递归算法中的重复计算。在这种方法中,从F(3)开始,只需要用一个循环不断更新前两个数的值。具体来说,初始值为F(2)=1,设定两个变量num1和num2分别保存F(n-2)和F(n-1)。每次循环迭代,更新这两个变量的值,直到达到目标n-1。

这种方法的时间复杂度为O(n),因为每次迭代只需要常数时间来更新这两个变量,而循环的次数与n成正比。

总结

通过上述分析可以看出,递归算法由于其重复计算的特点,具有指数级的时间复杂度O(2^n),这使得大规模的n难以在合理的时间内求解。而非递归算法通过线性迭代的方式,重大幅度地减少了计算量,其时间复杂度为O(n),大大提高了解决决问题的效率。

转载地址:http://bpcpz.baihongyu.com/

你可能感兴趣的文章
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>