求解斐波那契数列的两种算法,分析其时间复杂度。
递归算法:

#include <stdio.h>
long f1( int n );int main ( void )
{int n;scanf( "%d", &n );long f = f1( n );printf( "f(%d) = %ld", n, f );return 0;
} long f1( int n )
{if( n <= 0 )return 0;else if( n <= 2 )return 1;elsereturn f1( n - 1 ) + f1( n - 2 );
}

由于每一次递归的每一项都会向下分出前面两个元素,所以递归算法的时间复杂度为O(2^n)。
非递归算法:

//求解斐波那契数列
#include <stdio.h>
long f2( int n );int main ( void )
{int n;scanf( "%d", &n );long f = f2( n );printf( "f(%d) = %ld", n, f );return 0;
} long f2( int n )
{if( n <= 0 )return 0;else if( n <= 2 )return 1;long p1 = 1, p2 = 1;int i;for( i = 3; i <= n; i++ ){p2 = p1 + p2;p1 = p2 - p1;}return p2;
}

非递归算法的时间复杂度是O(n)。
从上面的对比可以看出,使用递归来求解斐波那契数列是一个很糟糕的决定,原因在于递归的算法造成的很多的重复计算,违背了使用递归算法的合成效益原则。

王道——数据结构 第一章 思维拓展相关推荐

  1. 王道-操作系统-第一章

    王道-操作系统-第一章 1.概念.功能.目标 熟悉的操作系统 windows/linux/macos/ios/Android 1.1 概念 层次结构 定义 1.2 功能和目标 作为系统资源的管理者 进 ...

  2. 浙大第四版概率论第一章思维导图

    浙大第四版概率论第一章思维导图 主要用于自己复习用

  3. 王道计算机网络 第一章 计算机网络

    第一章:计算机网络 1.1 计算机网络概述 1.1.1 计算机网络的概念 概述 计算机网络是一个将分散的.具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的 ...

  4. 自考02324离散数学第一章思维导图

    自考计算机及应用本科专业中,刚刚学习完2014版<离散数学>第一章"命题与命题公式". 为了加深对书本的印象和理解,所以画出思维导图,如下图所示: ========== ...

  5. 数据结构 第一章 概论

    第一章 概论 数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合 数据:描述客观事物的符号.是能被计算机识别.处理的符号的集合. 数据对象:数据元素集合.数据子集 数据元素:是组成数据 ...

  6. 高数第一章思维导图(目前待录取,原件在评论区分享)

    高数 第一章 数列 函数 连续 函数 如果对于每个数x属于D,变量x按照一定的法则总有一个确定的y和它对应,则称x是y的函数. 记为y=f(x).常称x为自变量,y为因变量,D为定义域 极限 极 ...

  7. 实变函数第一章思维导图知识点总结

    实变函数第四章思维导图知识点总结 实变函数第三章思维导图知识点总结 实变函数第二章思维导图知识点总结

  8. 2023王道考研数据结构第一章---基本概念

    1.1 1.数据结构基本概念 1) 数据项.数据元素.组合项 2)数据对象 具有相同性质的数据元素的集合,是数据的一个子集. 如第一个数据对象是关于财富榜的所有数据元素的集合 第二个则是关于微博账号的 ...

  9. 王道408数据结构——第一章 绪论

    文章目录 一.概念 数据结构研究内容 二.数据三要素 逻辑结构 储存结构(物理结构) 运算 三.算法和算法评价 时间复杂度 空间复杂度 四.数字相关汇总 算法性能 二叉树相关 图相关 矩阵相关 一.概 ...

  10. (王道408考研数据结构)第一章绪论-第二节1:算法的基本概念、算法的特性及设计要求

    文章目录 一:算法的基本概念 (1)数据结构和算法的关系 (2)算法(Algorithm)的定义 二:算法的特性 三:算法设计要求 程序=数据结构+算法,前面我们已经探讨了什么是数据结构,明白了如何用 ...

最新文章

  1. MediaCodeC解码视频指定帧,迅捷、精确
  2. 哪家中国公司为Java 16贡献最多?Java第一大厂居然不是第一的...
  3. Cloudstack介绍(一)
  4. 打不开内存卡,U盘提示未格式化的3种修复及数据恢复方法
  5. Chrome TTFB中英文解释
  6. LVM的创建扩展缩减与删除
  7. linux下载git并为git配置连接ssh
  8. 一键修改分辨率bat_设置分辨率的批处理 | 学步园
  9. python爬取instom图片_用python爬虫保存instagram图片
  10. 计算机网络技术专业一体化课程方案,计算机网络技术课程革新中“一体化”模式的应用研究...
  11. 1656. Far Away Kingdom's Army
  12. 简单的水印制作之美图秀秀
  13. 如何使用计算机对文件修改密码,文件夹怎么设置密码?怎么给文件夹设置密码?...
  14. GCMail反垃圾邮件系统让企业远离垃圾邮件的困饶
  15. java和ssm开发的医院体检预约系统有论文
  16. 影响内存频率的几个因素
  17. localtime和localtime_r
  18. Python自动生成代码 - 通过tkinter图形化操作生成代码框架
  19. mac下安装cobra
  20. 《神雕瞎驴》,金庸看后哭了^-^

热门文章

  1. 5G 理论峰值速率是怎么计算的?
  2. 微信小程序全方位深度解析课程Dome-First项目module
  3. java的serialization_Java序列化(Serialization) 机制
  4. 【XXE技巧拓展】————8、黑夜的猎杀-盲打XXE
  5. 利用Python爬取公交地铁数据(TransBigData版)
  6. Linux虚拟主机管理系统---wdcp
  7. IOS nonatomic 与 atomic 的区别
  8. Python CT图像预处理——nii格式读取、重采样、窗宽窗位设置
  9. APP离线后,通过SystemClock.elapsedRealtime()校正时间
  10. maven 下载依赖源码