当前位置: 首页 > news >正文

算法之递归和迭代

递归和迭代(又叫递推)的区别,参考:

迭代与递归的区别_递归和迭代的区别-CSDN博客

示例参考:

笔记-迭代代替递归(Fibonacci小例)-CSDN博客

Fibonacci 数列及其计算方法_fibonacci数列-CSDN博客

迭代其实就是把之前的数给存下来,而递归每次都是从头到尾硬算,不会保留之前的计算结果。

以Fibonacci数列的计算为例

Fibonacci 数列及其计算方法

斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的。不过更多的人学习到这个数列是因为意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci)和他的《Liber Abaci》一书。在这本书中,列昂纳多·斐波那契以兔子繁殖为例子引出了这个序列,因此这个序列又称为“兔子数列”。

这个序列的前几项是这样的:0,1,1,2,3,5,8,13,21,34,⋯

在数学上,斐波纳契数列以如下被以递归的方法定义:

程序实现 斐波纳契数列的定义是递归形式的。自然,用递归函数最容易实现。

uint64_t Fibonacci(unsigned char n)
{if( n == 0 ) return 0;if( n == 1 ) return 1;return Fibonacci(n - 1) + Fibonacci(n - 2);
}

这个代码虽然简单,但是计算复杂度却太高。当 n稍微大一点时,计算时间就会非常长。

如果将递归算法改为递推,时间复杂度会降低很多。

uint64_t Fibonacci(unsigned char n)
{if( n == 0 ) return 0;if( n == 1 ) return 1;uint64_t fn, fnn = 1, fnnn = 0;for(int i = 2; i <= n; i ++){fn = fnn + fnnn;fnn = fn;fnnn = fnn;}return fn;
}

这个程序很简答,for 循环中计算了n−2次, 所以时间复杂度为 O(n)

使用递归时,如果要计算第100个数,那么要先直到第99和第98个,要知道第99个和第98个,就要分别进行递归,直到最后一层,再返回递归回来进行计算。

如果是用迭代,那么就是用循环从前往后计算,前两个数是固定的,先根据前两个数可以计算出第三个数,然后把第三个数和第二个数再赋值给之前的变量,再相加即可。迭代这里也是每次都重新计算,如果我把已经计算过的结果用链表保存起来,那是不是更好呢?

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学习记录第二十七天
  • XSS-跨站脚本攻击
  • uniapp中键盘抬起挤压界面
  • 笔记本一线品牌有哪些
  • VBA技术资料MF184:图片导入Word添加说明文字设置格式
  • Java TCP练习2
  • 文件上传-导引
  • P2858 [USACO06FEB] Treats for the Cows
  • WordPress建站之头像及字体错误修正
  • Git 常用命令与工作流程总结
  • 域自适应,你适应了嘛?
  • 快讯 | OpenAI 找回场子:chatgpt-4o-latest 刷新多项AI跑分纪录
  • 1.Linux_常识
  • Anaconda安装jupyter notebook、jupyterlab及体验
  • 如何快速掌握一款MCU
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • $translatePartialLoader加载失败及解决方式
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • mysql常用命令汇总
  • php ci框架整合银盛支付
  • Python_网络编程
  • Python利用正则抓取网页内容保存到本地
  • Redash本地开发环境搭建
  • Redux 中间件分析
  • 从伪并行的 Python 多线程说起
  • 给Prometheus造假数据的方法
  • 关于 Cirru Editor 存储格式
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • #QT(串口助手-界面)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (03)光刻——半导体电路的绘制
  • (1)(1.13) SiK无线电高级配置(六)
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (计算机网络)物理层
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四) Graphivz 颜色选择
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .Net Redis的秒杀Dome和异步执行
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET基础篇——反射的奥妙
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @Data注解的作用
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
  • [ 物联网 ]拟合模型解决传感器数据获取中数据与实际值的误差的补偿方法
  • [100天算法】-实现 strStr()(day 52)