算法图解学习笔记02:递归和栈

计算机内存原理

  要说递归和栈的问题,首先就要说下计算机内存的基本原理。简单理解计算机内存原理可以将一台电脑看作超市的存包柜,每个柜子都有柜号(即计算机中的地址,如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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP的9个内置对象-response

response代表服务器对客户端的响应。大部分时候,程序无须使用response来响应客户端请求,因为有个更简单的响应对象-out。它是页面输出流,是JstWriter的实例。JspWriter是Writer的子类,Writer是字符流,无法输出非字符内…

一个权重的物体拷贝权重给多个(oneWeightToMany)

你是否在做项目的时候经常会遇见一个物体带权重需要拷贝给其他物体,这时候其他物体多的数不胜数 你怎么办呢? 举例:假如一头狮子 身体你已经做好了,但是模型师把半个身体都做满了垂落的实体模型毛发,你是否感到头疼?&…

JSP的9个内置对象-session

session代表一次用户会话,其含义是:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话。 session通常用于跟踪用户的会话信息,如判断用户是否登录系统,或者在购物车应用中…

JavaScript-Tool:jquery.qrcode.js

ylbtech-JavaScript-Tool:jquery.qrcode.js1.返回顶部 1、插件描述:jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生成二维条码。如何使用它 将jquery.qrcode.min.js和jquery添加到您的…

lunix下的redis数据库操作——list列表

首先,需要先了解栈和队列的概念: 栈 先进后出:类比弹夹上的子弹,最后上进弹夹的子弹第一个使用,砌墙的板砖,后来居上 队列 先进先出:排队打饭,先到先得 创建列表: 左添…

通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~

通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~ 原文:通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~2年前我在玩Flex的时候就一直有一个疑问,就是如何来实现一个蚊香慢慢烧完的…

HTML 超链接

1.如何创建html超链接 <html> <body> <p> <a href"http://www.baidu.com" > website link</a> </p></body> </html>点击后跳转到baidu主页 2.超链接的title属性 <html> <body> <p> <a href&q…

无法打开物理文件 XXX.mdf,操作系统错误 5.5(拒绝访问) 的解决办法

用T-SQL命令附加数据库时&#xff0c;出现如下异常信息&#xff1a; 无法打开物理文件 XXX.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server&#xff0c;错误: 5120) 解决方案&#xff1a; 找到xxx.MDF与xxx_log.LDF文件&#xff0c;右键-属性…

关于__str__和__repr__的用法和区别

# __str__ : str(obj),要求必须实现了__str__,要求这个方法的返回值必须是字符串str类型 # print %s str# __repr__: 是__str__的备胎.如果有__str__方法,那么# print %s str都先去执行__str__方法,并且使用__str__的返回值 # 如果没有__str__,那么 print %s str…

用户注册信息实例

index.jsp用来接收用户输入的表单&#xff0c;其代码如下&#xff1a; <html> <body><form action"result.jsp" method"post"> 用户名&#xff1a;<input type"text" name"username"><br> 密码&#xf…

JSP调用request方法获取请求相关信息

index.jsp&#xff1a; <html> <body bgcolor"#FFFFF0"> 请求方式&#xff1a;<%request.getMethod() %><br> 请求的资源&#xff1a;<%request.getRequestURI() %><br> 请求用的协议&#xff1a;<%request.getProtocol() %&…

JSP实例-定时刷新页面

<html> <body> now the time is:<br> <% out.println(""new Date().toLocaleString()); //response对象中添加一个响应头&#xff0c;页面每20秒刷新一次 response.setHeader("Refresh","20");%> </body> </ht…

codeforces 540D Bad Luck Island (概率DP)

题意&#xff1a;会出石头、剪刀、布的人分别有r,s,p个&#xff0c;他们相互碰到的概率相同&#xff0c;输的人死掉&#xff0c;问最终活下去的人是三种类型的概率 设状态dp(i,j,k)为还有i个石头&#xff0c;j个剪刀&#xff0c;k个布时的概率&#xff0c;dp(r,s,p)1.0 状态转移…

jsp示例-response页面重定向

用户输入用户名和密码&#xff0c;如果用户名和密码分别是admin 和123&#xff0c;就重定向到success.jsp页面&#xff0c;否则重定向到登录页面。 index.jsp&#xff1a; <html> <body> 登录<br> <form action"next.jsp" method"post&qu…

齐次常系数递推关系式

题解&#xff1a;转载于:https://www.cnblogs.com/yinwuxiao/p/9429252.html

day_01 解析简单的程序

就以上一节FirstProgram为例&#xff0c;请看下图&#xff1a;01、AndroidManifest.xml是整个项目的配置文件&#xff0c;非常重要&#xff0c;每个应用程序里必须存在的xml文件&#xff0c;且名字不可以改变&#xff0c;四大组件的使用必须在此处声明注册才可使用&#xff0c;…

时区与程序设计

时区的定义 我们使用经纬度[1]来标识地球上的任意一个点。 理论时区 不像纬度有赤道作为自然的起点&#xff0c;经度没有自然的起点而使用经过伦敦格林尼治天文台旧址的子午线作为起点。 理论时区的宽度是15&#xff0c;所以一共有 360 / 15 24 个时区&#xff0c;一天有 24 小…

JSP实例-彩色验证码

image.java用于产生彩色验证码&#xff0c;其代码如下&#xff1a; package test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.ut…

P1678 烦恼的高考志愿

题目背景 计算机竞赛小组的神牛V神终于结束了万恶的高考&#xff0c;然而作为班长的他还不能闲下来&#xff0c;班主任老t给了他一个艰巨的任务&#xff1a;帮同学找出最合理的大学填报方案。可是v神太忙了&#xff0c;身后还有一群小姑娘等着和他约会&#xff0c;于是他想到了…

Java代码实现Fibonacci数列

Fibonacci数列 1.定义&#xff1a; 0, 1, 1, 2, 3, 5, 8, 13, 21, . . .; f0 0, f1 1, fn fn−1 fn−2 for n ≥ 2. 2.两种实现算法&#xff1a; 2.1递归&#xff08;recursive&#xff09; T(n)>2n/2证明: T(n)T(n−1)T(n−2)>2T(n−2)>22T(n−4)>...>2n/2T…