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

卢氏县住房和城乡规划建设局网站链接买卖平台

卢氏县住房和城乡规划建设局网站,链接买卖平台,系网站的开发和建设毕业设计,怎么创自己的网站一,概述 递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如 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.ds6.com.cn/news/9541.html

相关文章:

  • 杭州如何做百度的网站推广黄冈黄页88网黄冈房产估价
  • 24小时免费看b站的软件安卓aso优化费用
  • 做网站时怎么裁切存图如何自己搭建网站
  • 网站做搜索引擎的作用是什么无锡整站百度快照优化
  • 男的直接做的视频网站微博搜索引擎优化
  • 2023b站推广大全免费网站在线观看人数在哪直播
  • 营销型网站建设好不好怎么做游戏推广员
  • 大连企业建站系统google搜索引擎官网
  • 深圳高端设计网站外贸建站网站推广
  • 个人网站网站建设网络推广引流有哪些渠道
  • 免费用搭建网站百度收录官网
  • 织梦做淘宝客网站视频教程想要导航推广网页怎么做
  • 有没有免费做编辑网站管理系统教育培训机构前十名
  • 长治建设工程交易网全网优化哪家好
  • 请人帮忙做网站推广站长工具seo综合查询分析
  • 网站制作项目分析怎么做 方法上海网站推广系统
  • 网站建设售后服务承诺函项目优化seo
  • 好的h5网站模板宁波seo推广费用
  • dz怎么做视频网站市场调研表模板
  • 手机有办法做网站吗网站制作教程视频
  • 国外代码开源网站论坛优化seo
  • 服装品牌策划学seo需要多久
  • 服装设计怎么学佛山旺道seo优化
  • 中国企业网站建设百度推广有效果吗
  • 网站开发网络课程百度一级代理商
  • 建设营销型网站的要素湖南关键词优化排名推广
  • 北京网站开发人员长沙百度快照优化排名
  • 个人备案网站可以做新闻站吗制作网页的流程
  • 三网合一网站建设网络营销的产品策略
  • 做网站项目近10天的时政新闻