计算机内存原理

  要说递归和栈的问题,首先就要说下计算机内存的基本原理。简单理解计算机内存原理可以将一台电脑看作超市的存包柜,每个柜子都有柜号(即计算机中的地址,如0x000000f)。当需要将数据存储到计算机中时,计算机会提供一个地址。

  其实算法图解这本书顺序是先写递归再写栈,我认为这样的顺序不好,应当先理解栈之后才能更好理解递归。借用下啊哈算法的图例和解释:

栈限定只能在一端进行插入和删除操作。比如说有一个小桶,小桶的直径只能放一个小球,我们现在向小桶内依次放入2号、1号、3号小球。假如你现在需要拿出2号小球,那就必须先将3号小球拿出,再拿出1号小球,最后才能将2号小球拿出来。在刚才取小球的过程中,我们最先放进去的小球最后才能拿出来,而最后放进去的小球却可以最先拿出来。这就是后进先出,也可以称为先进后出。

递归

  递归,上一张盗来的图解释下,递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。特别地,在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况,这也正是递归的定义所在。格外重要的是,这个解决问题的函数必须有明确的结束条件,否则就会导致无限递归的情况。

用python实现阶乘解释下递归

1 def fact(x):
2     if x == 1:
3         return 1
4     else:
5         return x * fact(x-1)        

  此时计算fact(3)的值

转载于:https://www.cnblogs.com/vincentme/p/9404169.html

算法图解学习笔记02:递归和栈相关推荐

  1. 算法图解学习笔记02之选择排序

    package 第二章;import java.util.Arrays;//找出列表中最小(大)的,放入新列表(O(n)),再次找 public class SelectionSort {public ...

  2. 算法图解学习笔记01:二分查找大O表示法

    二分查找 二分查找又称折半查找,其输入的必须是有序的元素列表.二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止:如果x<a[ ...

  3. 算法图解学习笔记01之二分查找

    不知道可以学到第几章,就不立flag了,容易倒 你要学会的不是写算法而是何时何地用何算法 package 第一章; //数组有序,要求快速查找出数据 public class BinarySearch ...

  4. 算法图解——学习笔记

    文章目录 算法简介 **第二章 选择排序** 数组与链表 排序算法 算法简介 算法:一组完成任务的指令,任何片段都可以视为算法. 第一章 算法集合: 算法种类 定义 二分法 一种查询方法,通过将查找特 ...

  5. 算法训练营学习笔记1

    算法训练营学习笔记 贪心算法 心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案.从问题的初始解开始,一步歩地做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解: 贪心本质 ...

  6. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  7. 算法图解:如何用两个栈实现一个队列?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...

  8. openCVPracticalExercise学习笔记02

    原创:openCVPracticalExercise学习笔记02 10使用Hu矩进行形状匹配 Hu矩(或者更确切地说是Hu矩不变量)是使用对图像变换不变的中心矩计算的一组7个变量.事实证明,前6个矩不 ...

  9. opencv学习笔记02

    原创博文地址:opencv学习笔记02 OpenCV-Python教程:11.图片阈值 https://www.jianshu.com/p/267a32ad0a23 cv2阈值处理:https://b ...

最新文章

  1. 蜜罐的详细配置过程以及所需要的的软件!以及全部配置!
  2. 11位院士专家建言基础研究
  3. 揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活【附下载】| 智东西内参...
  4. 自学python转行-转行学习python 需要多久?应该如何学习?
  5. 【MM配置】Global Data 全局数据相关配置
  6. pycharm报黄提示(黄色高亮警告):non-default parameter follows default parameter(定义时将没有默认值的参数放到了有默认值参数的后面)
  7. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...
  8. Laravel源码解析之Response
  9. java freemarker 模版_Java模版引擎Freemarker
  10. 《矩阵分析与应用》(第2版)———知识+Matlab2018a——2nd
  11. 安装kali的过程以及菜咩学到的基础知识
  12. Cesium场景导出为图片功能
  13. 中国龙与西方龙的区别
  14. C# 获取时间段的方法
  15. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
  16. z3735f android x86,随大流,也装了个z3735f的小主机(1223更新功耗图)
  17. java 开源 ai 生成新闻_IBM 发布了自动为新闻播报生成字幕的 AI 模型
  18. 安卓Toast随时跟新以及自定义Toast
  19. 延缓写入失败计算机硬件,WinXP提示windows写入延缓失败怎么办?写入延缓失败解决方法...
  20. 主流的券商系统有哪些?

热门文章

  1. python中shutil模块_Python中shutil模块的学习笔记教程
  2. css3 下边框缓缓划过_干货来袭!web前端开发工程师必看之如何使用CSS3实现瀑布流效果?...
  3. JVM005_synchronized、同步指令、管程、MESA
  4. python 对比文件内容差异_使用Python来比较文件夹并提取差异部分
  5. java字符串匹配dp_[OI]字符串DP小结
  6. mysql网络异常_mysql运行过程中因网络或者数据库原因导致的异常
  7. c++ 命名空间的using声明
  8. java basic data type,java基本数据类型--Basic Datatypes
  9. python o创建文件_Python 文件I/O
  10. 关联的两个字段度需要建立索引吗_索引那些事儿