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

吉林省建设厅官方网站办事指南腾讯企业邮箱登陆入口

吉林省建设厅官方网站办事指南,腾讯企业邮箱登陆入口,企业管理咨询机构,网站app免费制作软件说明 【数据结构与算法之美】专栏学习笔记 什么是递归? 递归是一种应用非常广泛的算法(或者编程技巧),比如 DFS 深度优先搜索、前中后序二叉树遍历等等都是用到了递归。 方法或函数调用自身的方式称为递归调用,调用…

说明

【数据结构与算法之美】专栏学习笔记

什么是递归?

递归是一种应用非常广泛的算法(或者编程技巧),比如 DFS 深度优先搜索、前中后序二叉树遍历等等都是用到了递归。

方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。

递归问题基本都可以用递推公式来表示,比如:

f(1) = 1;
f(n) = f(n-1) + 1; // n 是大于 1 的正整数

递归需要满足的三个条件

  1. 一个问题的解可以分解为几个子问题的解
  2. 分解之后的子问题求解思路一样
  3. 存在递归终止条件

如何编写递归代码?

写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。

编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。

如何避免出现堆栈溢出呢?

为什么递归代码容易造成堆栈溢出呢?

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

如何预防堆栈溢出呢?

可以通过在代码中限制递归调用的最大深度的方式来解决。递归调用超过一定深度之后,不继续往下再递归,直接返回报错。

如何避免重复计算呢?

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

怎么将递归代码改写为非递归代码?

递归代码优点:

  • 表达力很强
  • 写起来非常简洁

递归代码缺点:

  • 空间复杂度高
  • 有堆栈溢出的风险
  • 存在重复计算
  • 过多的函数调用会耗时较多

笼统的讲,所有的递归代码都可以改写为迭代循环的非递归写法。抽象出递推公式、初始值和边界条件,然后用迭代循环实现。

调试递归

  1. 打印日志发现,递归值。
  2. 结合条件断点进行调试。
http://www.15wanjia.com/news/170030.html

相关文章:

  • 网站后台有显示前台没有杭州seo平台
  • 网站建设优化推广教程计算机软件开发培训
  • 网站注册凡科在线教育网站制作
  • 潮汕学院网站开发怎样做网络推广给我 你所有地方都上手
  • 东莞万江网站制作江苏省建设信息网官网
  • 德州市建设小学网站腾讯云域名续费
  • 淘宝做海淘产品 网站折扣变化快wordpress 蜘蛛
  • 做网站沧州仿站小工具+wordpress
  • 太原顶呱呱做网站地址电话外链发布平台大全
  • 网站后台管理系统 aspwordpress仿唯品会
  • 推广网站弄哪家好wordpress登陆可见
  • 插件素材网站做网站被罚款
  • 信息图表设计网站电子商务平台管理
  • 智慧团建注册入口做seo推广一年大概的费用
  • 网站备案跟域名有什么关系论坛类网站备案吗
  • 广东省住房和城乡建设厅网站企业网站建设 百度文库
  • html5网站开发公司有哪些网站能免费建站
  • 企业网站推广方案范文正规培训机构有哪些
  • 如何在图片上添加文字做网站网红网站建设官网
  • 去别人网站挂黑链西安个人网站建设
  • 金华建设网站综合门户网站源码
  • 品牌网站建设gs鼎城网站建设
  • 东莞横沥网站制作公司网站制作多少钱
  • 校园网站制作方法如何看网站的ftp
  • 义乌哪里有学做网站的余姚网
  • 怎么用一个主机做多个网站好订单网服装加工接单
  • 网站开发公司照片服装公司网站策划书
  • 提供企业网站建设价格妇科医院网站建设
  • 高科技公司网站模板公司部门有哪些
  • 深圳网站建设联雅谷歌推广电话