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

合肥百度 网站建设陕西网站关键词自然排名优化

合肥百度 网站建设,陕西网站关键词自然排名优化,宁波seo教程推广平台,临桂区建设局网站一,概述 递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等。 去的过程叫“递”,回来的过程叫“归”。基本上所有的递归问题都可…

一,概述

递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等。

去的过程叫“递”,回来的过程叫“归”。基本上所有的递归问题都可以用递推公式来表示。

递归需要满足的三个条件

  1. 一个问题的解可以分解为几个子问题的解;
  2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样;
  3. 存在递归终止条件。

二,常见的递归问题

  • 斐波那契数列:递推公式:f(n) = f(n-1) + f(n-2)
  • 跳台阶问题:递推公式:f(n) = f(n-1) + f(n-2)

斐波那契数列问题的”记忆化递归“实现代码如下:

// 1,直接递归会超出时间限制,需要使用记忆化递归
int fib(int n) {if (n == 0) return 0;if (n == 1 || n == 2) return 1;if (vec[n] != -1) return vec[n];vec[n] = (fib(n - 1) + fib(n - 2)) % mod;return vec[n];
}

二,如何编写递归代码

递归问题的层层调用分析是不符合人类直觉的,因此没必要用人脑去分解递归代码的每个步骤,正确的做法是,遇到递归问题就拆分问题并抽象成递归公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。

三,递归代码要警惕堆栈溢出

递归代码涉及到函数调用,函数调用会使用栈来保存临时变量。每调用一个函数,都会将临时变量封装为栈帧压入内存栈,等函数执行完成返回时,才出栈。系统栈或者虚拟机栈空间一般都不大。如果递归求解的数据规模很大,调用层次很深,一直压入栈,就会有堆栈溢出的风险。

通过在代码中限制递归调用的最大深度的方式一定程度上可以解决堆栈溢出的问题。伪代码如下:


// 全局变量,表示递归的深度。
int depth = 0;int f(int n) {++depth;if (depth > 1000) throw exception;if (n == 1) return 1;return f(n-1) + 1;
}

但这种做法并不能完全解决问题,因为最大允许的递归深度跟当前线程剩余的栈空间大小有关,事先无法计算。如果实时计算,代码过于复杂,就会影响代码的可读性。所以,如果最大深度比较小,比如 10、50,就可以用这种方法,否则这种方法并不是很实用。

四,递归代码要警惕重复计算

为了避免重复计算,我们可以通过一个数据结构(比如散列表)来保存已经求解过的 f(k)f(k)f(k)。当递归调用到 f(k)f(k)f(k) 时,先看下是否已经求解过了。如果是,则直接从散列表中取值返回,不需要重复计算。

这种”递归+备忘录(记忆化递归)“的方法相比简单的递归,可以减少时间复杂度,本质是用空间换时间。

五,总结

递归是一种非常高效、简洁的编码技巧。只要是满足“三个条件”的问题就可以通过递归代码来解决。

但是递归代码也比较难写、难理解。编写递归代码的关键就是不要把自己绕进去,正确姿势是写出递推公式,找出终止条件,然后再翻译成递归代码。

递归代码虽然简洁高效,但是,递归代码也有很多弊端。比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高等,所以,在编写递归代码的时候,一定要控制好这些副作用。

参考资料

《数据结构与算法之美》-递归

http://www.wangmingla.cn/news/118556.html

相关文章:

  • 哪个行业建设网站的需求多网络营销乐云seo
  • 做网站支持提现支付宝淘宝seo对什么内容优化
  • 建设网站为什么要虚拟主机郑州做网站哪家好
  • 娄星区建设局网站5188关键词挖掘工具
  • 做装修的有那些网站比较好免费做网站网站
  • 自己怎么做彩票投注网站广州seo工作
  • 妙趣网 通辽网站建设流量主广告点击自助平台
  • 网站开发需要哪些长沙网站设计
  • 兼职做Ppt代抄论文的网站百度seo排名帝搜软件
  • 网站建设服务是什么意思如何免费创建自己的网站平台
  • 什么网站可以做邮件列表网络营销策略名词解释
  • 做网站需要知道什么合肥关键词快速排名
  • 3g网站是什么意思软件排名优化
  • 可以免费浏览的网站网站生成
  • 空间ip地址访问网站seo推广主要做什么
  • 明星用什么软件做视频网站百度知识营销
  • 湖南星大建设集团有限公司网站网站seo 优化
  • 做外贸需要浏览外国网站推广网站的四种方法
  • 网站建设与制作价格网站建设公司推荐
  • 高端品牌网站开发优化营商环境心得体会1000字
  • 苏宿工业园区网站建设成功案例seo是什么职位的简称
  • 网站建设素材图片产品如何推广市场
  • 吉林网站开发市场营销策划书
  • 河南周口东宇网站建设中国的网络营销公司
  • 上海专业做网站公司报价免费关键词优化工具
  • 厦门网站建设费用石家庄seo按天扣费
  • 电商网站页面螺蛳粉的软文推广
  • 网站哪里可以做今日重要新闻
  • wordpress放音乐常州seo外包公司
  • 做网站有几种语言成都seo招聘信息