iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python数据结构之递归可视化详解
  • 731
分享到

Python数据结构之递归可视化详解

2024-04-02 19:04:59 731人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1.学习目标2.递归的调用3.递归可视化3.1 turtle 库简介3.1 递归绘图1.学习目标 递归函数是直接调用自己或通过一系列语句间接调用自己的函数。递归在程序设计有着举足

1.学习目标

递归函数是直接调用自己或通过一系列语句间接调用自己的函数。递归在程序设计有着举足轻重的作用,在很多情况下,借助递归可以优雅的解决问题。虽然使用递归可以快速的解决一些难题,但由于递归的抽象性,使递归难以掌握。为了更好的理解递归函数背后的思想,本节主要通过可视化方式来了解递归函数的执行步骤。

通过本节学习,应掌握以下内容:

提高对递归的理解

利用可视化理解递归函数背后的思想

2.递归的调用

虽然使用递归可以快速的解决一些难题,但由于递归的抽象性,使得递归难以掌握。虽然已经在《递归基础》中讲解了递归的示例,并且简单的了解了递归的调用过程,但缺乏具体的认知。本节将对递归的调用进行更加深入的讲解。

递归函数执行时,每次递归调用都会在内存中创建新的函数副本,一旦函数调用结束,则返回一些数据,并将此副本就会从内存中删除。通常,递归方法得到的解决方案看起来十分简洁简单,但理解并跟踪函数的执行却较为复杂。为了更好地理解,考虑以下求取斐波那契数列的简单示例:

def fibo(n):
    if n == 0:
        return 1
    else:
        return n * fibo(n - 1)
def main():
    number = 4
    result = fibo(number)
    print(result)
if __name__ == "__main__":
    main()

当程序运行到第 10 行时。第一次调用 fibo() 函数,会为 fibo() 函数调用创建一条新的活动记录,此时在运行时栈上具有 3 条活动记录。然后 python 解释器跳转到第 2 行,其中 n 指向数字 4,如下图所示。n 不等于 0,因此跳转到第 5 行,其中包含一个对 fibo() 的函数调用,这将在运行时堆栈上创建另一个活动记录。重复上述过程,直到 n=0。

需要注意的是,每个递归函数调用都有一个变量 n 的副本。活动记录保存函数范围内的所有局部变量和参数。每次调用函数时,都会创建一个新的活动记录,并将局部变量的新副本存储在活动记录中,程序运行过程的调用顺序如下图所示:

当函数执行到 n=0 时,fibo() 函数返回了它的第一个值,它将 1 返回到上一个函数调用。如下图所示,从运行时堆栈中弹出 n=0 时函数调用的活动记录(通过将图中活动记录的变为灰色来表示)。当函数返回时,活动记录的空间被回收以供以后使用。堆上的阴影对象 0 也被垃圾收集器回收,因为不再有指向它的引用。

在第一次 fibo() 函数返回之后,Python 解释器返回到前一个函数调用中的第 5 行,这个语句也包含一个 return 语句,所以函数再次返回到第 5 行,返回值为 1。同样,函数再次返回,但这次的值为 2。按照上述过程,直到 fibo() 函数返回到 main() 函数的第 8 行,整个过程如下图所示:

最后,程序打印执行结果,在第 9 行之后从 main() 函数返回,在第 11 行后从 module 返回并终止。从以上示例可以看出,对 fibo() 函数的每次递归调用都会创建自己的变量副本。每次调用该函数时,都会将局部变量和参数复制到相应的活动记录中。当函数调用返回时,相应的活动记录会从运行时堆栈中弹出。这就是递归函数的执行方式。

3.递归可视化

本节将利用 turtle 库递归的绘制图案,提高对递归过程的认识。

3.1 turtle 库简介

turtle 库属于是python的标准库,通常用于绘制图案,可以使用该库创建一只小乌龟 (turtle) 在画布上移动,当小乌龟爬行时会在画布上绘制线条,而当前尾巴抬起时,并不会进行绘制。

接下来,我们将介绍一些基本的 turtle 绘图函数:

  • turtle.penup(): turtle 抬起尾巴,之后的移动并不在图上进行绘制
  • turtle.pendown():turtle 放下尾巴,开始爬行,之后会在图上绘制其行动轨迹
  • turtle.pensize(width):用于改变画笔的宽度
  • turtle.pencolor(color):用于改变画笔颜色
  • turtle.forward(distance):向前移动 distance
  • turtle.back(distance):向后移动 distance

3.1 递归绘图

首先通过创建一个简单的递归函数 draw() 来了解 turtle 库,这个递归函数的基本情况为——要画的线长 distance 降为 0;若线长大于 0,就让小乌龟小乌龟向前绘制 distance 个单位距离,然后左转 30 度;递归情况为——缩短后的距离再次调用 draw() 函数。

# 导入 turtle 库
import turtle
# 创建小乌龟对象
my_turtle = turtle.Turtle()
# 创建用户绘制图案的窗口
window = my_turtle.getscreen()

def draw(turtle, distance):
    if distance > 0:
        # 小乌龟向前绘制 distance 个单位距离
        turtle.forward(distance)
        # 然后左转 30 度
        turtle.left(30)
        draw(turtle, distance-6)
draw(my_turtle, 200)
window.exitonclick()

接下来,我们使用 turtle 模块绘制分形树。分形树和递归有许多的共同点,是数学中的一个概念,无论放大多少倍观察分形图,总能看到相同的基本形状。

如果我们定义树为包含向左生长的子树和向右生长的子树的话,就可以根据递归的思想得到分形树:

import turtle
def tree(branch, turtle):
    if branch > 5:
        turtle.forward(branch)
        turtle.right(20)
        tree(branch-15, turtle)
        turtle.left(40)
        tree(branch-10, turtle)
        turtle.right(20)
        turtle.backward(branch)
my_turtle = turtle.Turtle()
window = my_turtle.getscreen()
my_turtle.left(90)
my_turtle.up()
my_turtle.backward(300)
my_turtle.down()
tree(110, my_turtle)
window.exitonclick()

到此这篇关于Python数据结构之递归可视化详解的文章就介绍到这了,更多相关Python递归可视化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python数据结构之递归可视化详解

本文链接: https://www.lsjlt.com/news/117317.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python数据结构之递归可视化详解
    目录1.学习目标2.递归的调用3.递归可视化3.1 turtle 库简介3.1 递归绘图1.学习目标 递归函数是直接调用自己或通过一系列语句间接调用自己的函数。递归在程序设计有着举足...
    99+
    2024-04-02
  • Python数据结构之递归可视化的方法
    今天小编给大家分享一下Python数据结构之递归可视化的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.学习目标递归函...
    99+
    2023-06-30
  • Python数据结构之递归方法详解
    目录1.学习目标2.递归2.1递归的基本概念2.2递归的重要性2.3递归三原则2.4递归的应用3.递归示例3.1列表求和3.2汉诺塔(Towers of Hanoi)问题1.学习目标...
    99+
    2024-04-02
  • python数据结构之递归方法讲解
    目录1.递归概念2. 递归三原则2.1 实现任意进制的数据转换今天我们来学习python中最为重要的内容之递归,对以往内容感兴趣的同学可以查看下面: python数据类型: pyth...
    99+
    2024-04-02
  • Python 数据可视化之Bokeh详解
    目录安装散点图折线图条形图交互式数据可视化Interactive Legends添加小部件按钮复选框单选按钮总结安装 要安装此类型,请在终端中输入以下命令。 pip install...
    99+
    2024-04-02
  • Python 数据可视化之Seaborn详解
    目录安装散点图线图条形图直方图总结安装 要安装 seaborn,请在终端中输入以下命令。 pip install seaborn Seaborn 建立在 Matplotlib ...
    99+
    2024-04-02
  • Go语言数据结构之二叉树可视化详解
    目录题目源代码做题思路扩展左右并列展示上下并列展示总结回顾题目 以图形展示任意二叉树,如下图,一个中缀表达式表示的二叉树:3.14*r²*h/3 源代码 package ...
    99+
    2024-04-02
  • Python 数据可视化之Matplotlib详解
    目录使用的数据库tips 数据库Matplotlib散点图折线图条形图直方图总结在深入研究这些库之前,首先,我们需要一个数据库来绘制数据。我们将在本完整教程中使用 tips data...
    99+
    2024-04-02
  • Python数据结构之递归方法怎么用
    这篇“Python数据结构之递归方法怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python数据结构之递归方法怎么用...
    99+
    2023-06-30
  • python 数据结构之二分查找的递归和
    二分查找就是待查找的列表进行分半搜索 如下所示 二分查找普通实现: def erfen(alist, item): start = 0 end = len(alist) - 1 while start <...
    99+
    2023-01-30
    递归 数据结构 python
  • C++ 函数递归详解:递归遍历树形结构
    递归函数可以用于遍历树形结构,其基本原理是函数不断调用自身并传入不同的参数值,直到基本情况终止递归。在实战案例中,用于遍历二叉树的递归函数遵循以下流程:若当前节点为空,则返回;递归遍历左...
    99+
    2024-05-04
    c++ 函数递归 堆栈溢出
  • Python数据可视化之Pyecharts使用详解
    目录1. 安装Pyecharts2. 图表基础2.1 主题风格2.2 图表标题2.3 图例2.4 提示框2.5 视觉映射2.6 工具箱2.7 区域缩放3. 柱状图 Bar模块4. 折...
    99+
    2024-04-02
  • Python数据可视化详解
    目录一、Matplotlib模块1、绘制基本图表1. 绘制柱形图2. 绘制条形图3. 绘制折线图4. 绘制面积图5. 绘制散点图6. 绘制饼图和圆环图2、图表的绘制和美化技...
    99+
    2023-05-16
    Python数据可视化 Python可视化 数据可视化
  • 带你了解Java数据结构和算法之递归
    目录1、递归的定义2、求一个数的阶乘:n!3、递归的二分查找4、分治算法5、汉诺塔问题6、归并排序7、消除递归8、递归的有趣应用  ①、求一个数的乘方②、背包问题③、组合:选择一支队...
    99+
    2024-04-02
  • Python数据可视化之Seaborn的使用详解
    目录1. 安装 seaborn2.准备数据3.背景与边框3.1 设置背景风格3.2 其他3.3 边框控制4. 绘制 散点图5. 绘制 折线图5.1 使用 replot()方法5.2 ...
    99+
    2024-04-02
  • Python数据结构之栈详解
    目录0. 学习目标1. 栈的基本概念1.1 栈的基本概念1.2 栈抽象数据类型1.3 栈的应用场景2. 栈的实现2.1 顺序栈的实现2.1.1 栈的初始化2.2 链栈的实现2.3 栈...
    99+
    2024-04-02
  • Java数据结构 递归之迷宫回溯案例讲解
    问题介绍: 用二维数组表示一个迷宫,设置迷宫起点和终点,输出迷宫中的一条通路 实现思路: 二维数组表示迷宫: 0表示路且未走过、1表示墙、2表示通路,3表示已经走过但走不通 设置寻...
    99+
    2024-04-02
  • C++ 函数递归详解:尾递归优化
    递归定义及优化:递归:函数内部调用自身,解决可分解为更小子问题的难题。尾递归:函数进行所有计算后才进行递归调用,可优化为循环。尾递归优化条件:递归调用为最后操作。递归调用参数与原始调用参...
    99+
    2024-05-03
    c++ 递归
  • PHP 数据结构的可视化技术
    php 数据结构可视化有三种主要技术:graphviz:开源工具,可创建图表、有向无环图和决策树等图形表示。d3.js:javascript 库,用于创建交互式、数据驱动的可视化,从 p...
    99+
    2024-05-07
    php 数据可视化 composer
  • Python基础之数据结构详解
    目录一、列表1.1 列表更新元素1.2 列表增加元素1.3 列表删除元素1.4 列表的其他操作二、元组2.1 删除元组2.2 元组的其他操作三、字典3.1 字典删除元素3.2 字典的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作