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

对递归的理解【笔录】

    数据结构和算法的学习,最难掌握的有两个,一个是动态规划,另一个则是递归。

    实际工程中递归的应用非常广泛,也是开发者经常被考察的重点。

  • 1.理解“递归”

    有这样一个场景,假设你在排队,前面排了很多人,但不知道自己排的是第几(每个人都不知道自己是第几名,除了第一个知道自己是第一名)。当你想知道你排第几的时候怎么做?当然你可以从第一个开始数(遍历一遍),还有一种方案就是偷懒的做法,你问你前面的人是第几名,你前面的人再问他前面的人......直到问到第一个人为止,然后再从前往后告知(每个人的名次都是前面的加1),到你自己你就知道自己是第几名。这不就是“递归”的思想吗?

   上面的例子中,从后往前问排第几体现在“”这个字,即一步一步往前递推;而回来告知结果体现在“”。用递推公式表示为:

     f(n) = f(n-1) + 1;其中 f(1) = 1。

用代码写出来为:

int f(int n)
{
    if(n == 1)
     return 1;
    else
     return f(n-1) + 1;
}
  • 2.递归的三要素

      (1)问题可分解为子问题

      (2)子问题的解决思路完全一致

      (3)存在终止条件

从这三个条件与上面排队的例子可以找到对应的关系。

  • 3.怎么写递归代码

       关键在于找到递推公式和终止条件

  • 4.递归难理解在哪?

  难在考虑递归过程的时候总会去想递归一层一层的调用,想着想着就乱了,其实这是计算机的思维方式,因为计算机的优势就是能存储每次递归的状态,即堆栈,而人并不能记忆那么多东西。所以,考虑递归的时候只需要通过递推公式和终止条件去推敲,不需要考虑每层的关系。

  • 5.递归注意的事项

   (1)防止递归过深----有堆栈溢出的风险

   (2)防止重复计算----消耗资源

  • 6.递归程序怎么调试

    (1)打印日志

    (2)添加条件和断点

相关文章:

  • 构造函数、复制构造函数、重载赋值运算符
  • python根据id查询MongoDB报错:NameError: name 'ObjectId' is not defined
  • 项目编译过程
  • Python报错:IndentationError: unindent does not match any outer indentation level
  • Windows无法启动MongoDB服务。错误1053
  • Redis的持久化
  • Redis需要知道的几个问题
  • 分布式消息队列【笔记】
  • 设计模式之---【发布订阅模式】
  • 设计模式之---【工厂模式】
  • 理解Epoll
  • 虚拟机ubantu18.04与Windows7共享文件夹(samba)
  • win10 “你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。”
  • 安装lua报错:fatal error: readline/readline.h: No such file or directory
  • 【重学Linux系列(一)之一一Linux命令】
  • classpath对获取配置文件的影响
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Cumulo 的 ClojureScript 模块已经成型
  • HTTP中GET与POST的区别 99%的错误认识
  • JS数组方法汇总
  • Laravel 菜鸟晋级之路
  • Linux下的乱码问题
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP的Ev教程三(Periodic watcher)
  • redis学习笔记(三):列表、集合、有序集合
  • scrapy学习之路4(itemloder的使用)
  • Spring-boot 启动时碰到的错误
  • Yeoman_Bower_Grunt
  • 动态魔术使用DBMS_SQL
  • 如何优雅地使用 Sublime Text
  • 我是如何设计 Upload 上传组件的
  • AI算硅基生命吗,为什么?
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Linux·i2c驱动架构​
  • ​水经微图Web1.5.0版即将上线
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (33)STM32——485实验笔记
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Python) SOAP Web Service (HTTP POST)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (剑指Offer)面试题34:丑数
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (强烈推荐)移动端音视频从零到上手(下)
  • (未解决)macOS matplotlib 中文是方框
  • ****Linux下Mysql的安装和配置
  • .java 9 找不到符号_java找不到符号
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET单元测试
  • .NET构架之我见
  • .NET和.COM和.CN域名区别
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET文档生成工具ADB使用图文教程
  • .NET中GET与SET的用法