数据结构与算法(一):图解递归

2023-05-16

图解递归

  • 小结

通俗地讲,递归即调用函数自身,很容易让人想到套娃玩具。但代码写出来又很让人不解,一个函数调用另一个函数很好理解,但调用自身什么鬼?因为这不是人类能轻易想象的结构。

递归是用栈来实现的,画出函数的进栈出栈图可以清楚看出其执行过程。
这里我们不使用栈,而从程序运行流程中理解。

我们从以下两点分析递归:
1、退出条件:必定有一个条件能结束递归,否则会死循环。函数的每次迭代都要使得向结束条件靠拢。
2、函数功能:函数每次迭代都会完成某一特定功能,而这才是递归的目的。

考虑如下两个递归函数:
在这里插入图片描述这是两个简单的递归函数,以 func4为例,它的退出条件是x>0,func4(x-1)是对自身的调用,而函数实现的功能则是print(x).

func4 单次执行流程如下:
在这里插入图片描述


调用第二次时:
在这里插入图片描述

多次递归调用的情况就是:
在这里插入图片描述
最内层调用,x=1时不满足条件时会跳出递归,但程序是自上而下执行的,于是有输出1,2,3,4:
在这里插入图片描述

同样的思路我们可画出func3程序执行流程图:
在这里插入图片描述
x=1时退出递归,结果会一层层向外返回,但程序总是自上而下执行,所以输出结果就是4,3,2,1.


小结

这篇文章从程序流程角度给出递归的工作方式,希望大家对递归有更直观地感受,并没有讲解什么深刻内容。有n多文章从理论角度解读递归,很优秀,也很深刻。我不再举例了,有兴趣同学可以自行百度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法(一):图解递归 的相关文章

  • vm虚拟机摄像头调试_双机调试

    文章来源 xff1a 华盟论坛 条件 xff1a 已经安装好Visual Studio 2015 VM Win7 x64 wdk10 为什么要搭建双机调试 xff0c 普通的应用程序可以直接在本机进行调试 xff1b 但内核程序出错 xff
  • django无法生成迁移文件_Django初始化项目环境精讲

    上一节中 xff0c 我们完成了对 settings py 文件的基本配置 xff0c 本节我们还需要对新建的项目进一步的操作 xff0c 从而完成项目的初始化工作 在 settings py配置文件详解 一文中 xff0c 我们介绍了 I
  • mysql多少g_mysql表能有多大?

    MySQL 3 22 had a 4GB 4 gigabyte limit on table size With the MyISAM storage engine in MySQL 3 23 the maximum table size
  • gentoo 上安装 xrdp (1)

    第一次在 ubuntu 上安装 xrdp 用的是 https c nergy be blog p 61 14888 后来重装了ubuntu 就对照上面脚本和 https github com neutrinolabs xrdp wiki B
  • mysql怎么进行组内排序_MySQL 组内排序

    在开发中经常遇到这样一类需求 xff1a 取每种类型排名前几的数据 在此我简称它为组内排序 以下 xff0c 我借鉴了别人的方法并添加自己的想法 xff0c 就这类问题做一下理解 xff1a 数据准备 CREATE TABLE 96 tes
  • C/C++ 找出输入的10个数的最大值和最小值

    C C 43 43 找出输入的10个数的最大值和最小值 此代码最大特色是不用数组 include span class token operator lt span iostream span class token operator gt
  • python输入abcd输出对应的1234_python学习日记——练习题整理及解答

    1 执行python脚本的两种方式 2 简述位 字节的关系 1字节 61 8位 3 简述ASCII Unicode utf 8 gbk的关系 4 写出 李杰 分别用utf 8和gbk编码所占位数 utf8中文3字节 xff1b gbk中文4
  • python爬虫爬取代理ip构建代理ip池,并自动测试是否可用

    python多线程非阻塞爬取代理ip并自动测试是否可用 推荐一个网站西刺代理 xff0c 其中每天都会更新一些高匿代理ip供使用 https www xicidaili com 一页有99个ip xff0c 但是经我测试 xff0c 一般只
  • tomcat常用的配置

    这里我们使用tomcat版本 xff1a apache tomcat 7 0 77 windows x64 zip 为例 xff1a 下载链接地址为 xff1a https archive apache org dist tomcat to
  • c语言60秒倒计时编程,单片机60秒倒计时protues仿真及程序源码

    include define uint unsigned int define uchar unsigned char uchar code table 61 0xc0 0xf9 0xa4 0xb0 0x99 p 0x92 0x82 0xf
  • 怎么查看linux下mysql位置,linux服务器上怎么查看mysql的my.cnf的位置

    Debug5出品 xff0c 零基础 xff0c 小白高效入手python后端视频教程 xff1a xfeff linux服务器上 xff0c 运行着mysql xff0c 这时候想看my cnf的位置 xff0c 怎么来看呢 xff1f
  • TCP连接

    TCP连接管理 一 TCP三次握手二 TCP四次挥手三 为什么建立连接是三次握手 xff0c 释放连接是四次挥手 一 TCP三次握手 第一步 xff1a 客户端向服务器发送 连接请求报文 SYN 61 1 第二步 xff1a 服务器收到 连
  • ios上传音频文件到服务器,怎么把第三方音频文件添加到Apple Music

    当然是可以的啦 xff0c 目前呢 xff0c Apple Music在中国大陆提供上传自己的音乐到 iCloud音乐资料库 xff0c 不占用iCloud存储空间哦 xff5e 具体方法很简单 xff0c 最简单的是在Mac或者Windo
  • python3 实现公众号自动发消息

    python3 实现公众号自动发消息 前言微信公众号测试号申请申请测试公众号测试号信息测试号二维码模板消息接口新增流程 python 脚本配置access token pysend message pyinformation message
  • sublime的注册方法 非常好用

    一 前言 Sublime是一款很好用的编辑器 xff0c 虽然是免费使用 xff0c 但是经常会弹出吆喝着让你购买 xff08 purchase xff09 的弹窗 xff0c 对一名优秀的强迫症来说看久了还是很烦人的 而且现在网上很多注册
  • python脚本gui_为Python脚本创建GUI

    丹尼尔 我也建议你试试 如果您决定使用wxPython xff0c 这里有一个关于如何使选项卡工作的概要 它需要你填写一些空白 xff0c 但是一旦你掌握了wxPython的基本知识 xff0c 这将向你展示如何用标签构建一个 笔记本 基本
  • 手把手带你部署OpenStack环境

    这里写目录标题 1 OpenStack 环境部署1 1 部署准备1 2 部署思路 2 配置OpenStack 基础环境2 1 配置网卡环境2 2 所有节点上的基本操作2 2 1 关闭防火墙 核心防护2 2 2 添加主机名映射2 2 3 免交
  • Anaconda 3 安装&虚拟环境配置

    1 下载软件 国内清华大学开源软件镜像选择合适的版本下载 https mirrors tuna tsinghua edu cn anaconda archive 2 安装软件 双击exe文件 xff0c 默认安装 最好是勾选上添加环境变量
  • json文件自动转换存入到mysql

    json 数据自动转换存入到mysql 有时候我们测试时 xff0c 把数据用json文件保存起来 xff0c 到上线时要转存到数据库 xff0c 如果数据文件数目较多 xff0c 将是一个比较繁琐的过程 本文基于node js写了个简单的
  • yum 配置php安装依赖镜像不对,yum更新遇到依赖错误的处理经验总结

    redhat系列linux系统的yum xff0c 有时会出现错误的依赖 xff0c 用linux早期 xff0c 遇到该类问题简直是束手无策 xff0c 无奈之下会在yum的 教唆 下使用 skip broken 参数 xff0c 有时确

随机推荐