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

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

  • 1.理解“递归”

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

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

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

用代码写出来为:

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

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

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

(3)存在终止条件

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

  • 3.怎么写递归代码

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

  • 4.递归难理解在哪?

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

  • 5.递归注意的事项

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

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

  • 6.递归程序怎么调试

(1)打印日志

(2)添加条件和断点

对递归的理解【笔录】相关推荐

  1. C语言递归的理解与应用

    函数-递归 文章目录 前言 一.什么是递归? 二.案例-递归的应用 1.场景1-规律性强 2.场景2-大型复杂问题 三.总结 前言 在初学C语言函数章节时,相信很多小伙伴对于递归难以理解,那么今天就让 ...

  2. python递归汉诺塔详解_汉诺塔在python中递归,理解磁盘目的地的变化

    我正在努力提高我对python中hanoi之塔递归解决方案代码的理解. 此代码:def moveTower(height,fromPole, toPole, withPole): if height ...

  3. [转载] Python 递归 深入理解递归 Python递归剖析,绝对让你看懂!

    参考链接: Python | print()中的结束参数 目录 递归剖析 递归的两个过程 return 返回值 详解 递归思路二分法和递归尾递归递归练习题 递归剖析 递归真的很重要,之前学的时候,学的 ...

  4. 彻底理解python递归_Python开发之-Python递归图示理解

    1.函数递归是函数式编程的重要组成部分,所以对函数递归的深层次理解十分重要.本人用图示的方法解释函数的层级递归方式,先理解下面的函数 deftest(n):if n == 1:return 1 els ...

  5. 递归的理解(数据结构)

    在数据结构中,很多内容都应用到递归,递归在数据结构中至关重要 链接 递归定义:一个函数.概念或数学结构,如果在其定义或说明内部直接或间接地出现对其本身的引用,或者是为了描述问题的某一状态,必须要用至它 ...

  6. 对递归的理解以及怎么写递归程序

    一.怎么写递归 1.一定要搞清楚当前你的递归程序的功能是什么,以及需不需要返回值,如果需要,则返回的值是什么,如果对当前递归程序要完成的功能模棱两可.一知半解,那么逻辑肯定混乱,也就不容易写出正确的递 ...

  7. 【思维风暴】算法迭代和递归的理解

    文章目录 递归与迭代 递归消耗内存的缺点 为什么要有迭代 需要用迭代消解递归的情况 不需要消解的递归 结束语 递归与迭代 递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构.递归与迭代都涉及 ...

  8. python递归如何理解

    最近在做递归一些相关的东西,发现递归入门很容易,但要具体了解其实现过程,比较难以理解,在这里将自己这几天的摸索记录一下,写知乎的主要目的是为了给自己做笔记,在做笔记的同时,帮助后来人少走弯路.今天简要 ...

  9. Python 递归 深入理解递归 Python递归剖析,绝对让你看懂!

    目录 递归剖析 递归的两个过程 return 返回值 详解 递归思路 二分法和递归 尾递归 递归练习题 递归剖析 递归真的很重要,之前学的时候,学的一知半解,以为真正了解,每次想到递归,就记得一句:返 ...

  10. 迭代和递归的理解和区别

    最近做一些题经常会碰到迭代的方法解的,或者递归解法,容易搞混,特在此整理一下 一.递归: 由例子引出,先看看递归的经典案例都有哪些 1.斐波那契数列 斐波纳契数列,又称黄金分割数列,指的是这样一个数列 ...

最新文章

  1. 网站商业计划书实例(商业网站策划书实例)
  2. 杭州师范大学计算机考研难吗,杭州师范大学考研难吗?一般要什么水平才可以进入?...
  3. 如何制作一个商城小程序?
  4. 线程池的几种构造方法及使用的策略
  5. Becky!客户端Hotmail/outlook邮箱设置方法
  6. 功能最强大的flv超酷网页播放器介绍flvPlayer
  7. Synch4j使用指南
  8. 学人工智能以后从事什么工作?这6大就业方向前景广阔
  9. 时间流逝,岁月里所有的狼狈
  10. 将多个文件夹下内容合并到一个文件夹下
  11. 手写JDBC的几个步骤(针对MySQL8.0以上的mysql数据库)
  12. opencv 级联分类器
  13. kafka查看消费情况
  14. 第五周学习总结-HTML5
  15. 机器学习-40-GAN-07-Feature Extraction(InfoGAN,VAE-GAN,BiGAN,Feature Disentangle(Voice Conversion))
  16. 习SQL语句之SQL语句大全
  17. fcpx如何用光流法_5分钟掌握FCPX所有剪辑技巧
  18. 银河英雄传说 ← 带权并查集
  19. 鸿蒙系统体验效果,搭载鸿蒙操作系统的智能家居,实现一键体验全场景效果
  20. python表达式323的值为_转: Python 运算符与用法

热门文章

  1. sersync+rsync的热备份研究(热备+断点续传)
  2. idea 的Igonre 设置
  3. Java编程到底是用idea好还是eclipse好?
  4. ERDAS遥感影像处理-专题图制作
  5. Day01_01_Linux_Ubuntu教程之Linux系统简介
  6. 【物联网专题】2.1_设备管理平台_什么是产品?
  7. java报错establishing_[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket错误解决方法总结...
  8. java监控命令_Java程序各种监控命令和排查方法
  9. JEESZ分布式框架简介---技术介绍文档
  10. 【网络】MTU理解、MTU对上层协议的影响