python数据结构与算法 22 递归图形

【AI 测试】一:算法和数据结构理解 一些常见的图算法包括深度优先搜索(DFS)、广度优先搜索(BFS)、Dijkstra算法、Bellman-Ford算法、Floyd-Warshall算法、Kruskal算法、Prim算法以及最大流算法等。总的来说,图算法是一种强大的工具,它利用图数据结构的特性,通过搜索、优化和其他技术,为各种实际问题提供解决方案。它从图的某一节点(源节点)开始,访问最靠近源节点的所有节点,然后逐层向外扩展,直到访问了图中所有可达的节点。它的工作原理是每次从未排序的元素中选择最小(或最大)的元素,放到已排序的序列末尾。 阅读详情

递归图形

上节中我们已经知道有些问题,如果用递归解决变得非常容易。但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么。这一节我们引入几个例子,用递归的方法画几个有趣的图形,通过观察图形的生成,也许能帮助你洞察递归的过程,从而学会递归的方法。

我们要用的工具是python的图形模块turtle,这个模块伴随python的全部版本而且很容易使用,语法也简单。你可以创建一个turtle(乌龟),让它向前,向后,左转,右转等,它的尾巴能抬起或落下,如果落下,当它运动的时候就画出一条轨迹线。为了增加艺术感,可以修改线条的宽度和墨水的颜色

这里有一个例子来说明turtle的基本功能。这段代码用turtle递归地画一段螺旋线。首先引入模块,然后创建一个turtle对象,并新建一个窗口对象作为画布。下面定义drawSpiral函数。递归函数的基点,是每次运动的距离降到不大于0。向基点运动的方式,是每次画线之后,右转90度,然后再次画线,不过这次的距离就减少。在代码的最后会看到调用函数myWin.exitonclick(),这是一个小方法,作用是turtle对象进入等待模式,如果在窗口里点击,即清理并退出运行。

importturtle

 

myTurtle = turtle.Turtle()

myWin = turtle.Screen()

 

defdrawSpiral(myTurtle,lineLen):

    iflineLen>0:

        myTurtle.forward(lineLen)

        myTurtle.right(90)

        drawSpiral(myTurtle,lineLen-5)

 

drawSpiral(myTurtle,100)

myWin.exitonclick()

知道这些就够了,足以画出令人惊叹的美图。下一个程序我们要画个棵分形树。分形是一个数学分枝,其中有很多的递归思想。分形的定义是,不论把图形放大多少倍,其中总有相似的图形。现实中的例子是象大陆海岸线,雪花,山岭,树或灌木。自然界的分形现象使得计算机能够产生足以乱真的电影效果。

要理解这一点,先要想一想我们是如何描述一个分形树的。记得我说过,分形就是不论放大多少倍,在不同的层级上图形都看起来很象。把这句话放在树或灌木上,可以说一个小树杈有着整棵树的形状和特征。这样说来,一棵树就是树干有左右两个分枝,每个分枝又是比较小的树。看到没有,上面这个定义中用到了递归。用树定义了树。

让我们把想法变成python代码。List1就是用turtle画出的分形树。5-7行是递归调用。第5行是向右转20度之后调用,这是刚才提到的右边的小树。第7行是是另一个递归调用,但这次是左转40度之后的调用。之所以要转40度,是因为先要从刚才的右转中回转20,再转20才是左向20度。另外要注意的是,每次递归,都把树枝的长度减少一块,这是为了让树越来越小。第2行有一个检查过程,防止树枝长度过小,也是递归的基点

Listing 1

1

2

3

4

5

6

7

8

9

deftree(branchLen,t):

    if branchLen>5:

        t.forward(branchLen)

        t.right(20)

        tree(branchLen-15,t)

        t.left(40)

        tree(branchLen-10,t)

        t.right(20)

        t.backward(branchLen)

完全的实现代码在下面。在运行它之前,不妨心中先想像一个,程序会如何绘制这棵树。它会同时对称地在左右两棵树上绘制吗?还是先右再左呢?

i

import turtle
 
def tree(branchLen,t):
    if branchLen > 5:
        t.forward(branchLen)
       t.right(20)
        tree(branchLen-15,t)
        t.left(40)
        tree(branchLen-15,t)
        t.right(20)
        t.backward(branchLen)
 
def main():
    t = turtle.Turtle()
    myWin = turtle.Screen()
    t.left(90)
    t.up()
    t.backward(100)
    t.down()
    t.color("green")
    tree(75,t)
    myWin.exitonclick()
 
main()

注意每一个树枝对应一次递归调用;

注意它是怎样一直向右延伸到最短的末梢,如图1所示;

注意程序怎样回退一直到整个右枝完全画完。整个的右枝见图2.

注意到左树枝以后,不是把左边的一向画到最后的末梢,而是再次把左枝的右枝画到末梢,直到最后画完。





图1 分形树的开始

图2 分形树的右分枝

这个简单的程序只是一个开始点,可能这个树不太“真实”,这是因为自然界不象电脑程序那么对称。本章结束时将给你一些建议去探索一些有趣的选项,使得这棵树显得更真实一些。

(译者上一些分形图,与各位共享)

Python语言的算法 在本文中,我们系统地探讨了Python语言中的算法,从算法的基本概念到具体的实现,涵盖了多种常见的算法类型与应用。了解和掌握这些算法不仅有助于提高我们的编程能力,也为我们解决实际问题提供了强有力的工具。希望读者在以后的学习和工作中,能够灵活运用算法的思想和技巧,不断提高自己的技术水平。 阅读详情

相关推荐

Python排序算法动画可视化教学工具

排序算法是数据结构与算法课程的核心基础概念,其执行过程具有强状态演化特性,传统伪代码难以呈现动态逻辑流。基于生成器(yield)与matplotlib.animation.FuncAnimation的可视化实现,可将冒泡、归并、快排等算法每一步比较、交换、递归分割等操作实时映射为条形图高度变化与颜色状态流转,既符合算法‘逐步生成有序序列’的本质原理,又显著提升初学者的直觉理解效率。该方案技术门槛低、可调试性强,适用于编程入门、课堂教学演示及面试复习等典型工程教育场景,是Python可视化与算法教学深度融合的

hideto 412

使用Python turtle画图时,画完图形窗口一下子消失,退出窗口的几个解决方法

使用Python turtle画图时,画完图形窗口一下子退出消失怎么办,如何能够停留在画完的窗口呢?退出窗口的几个解决方法 程序退出画图界面的原因,本质上来说就是程序执行完成了,程序自然会退出。只要我们能够想办法让程序在画完图片后,不退出就好了。turtle提供了几个可以让窗口一直保持着的方法: 1.第一种方法:在程序的最后面加上:turtle.exitonclick() 该语句让程序...

跬步Python股票数据量化分析 5万+

递归图 时间序列重构小波变换_递归图matlab_reconstitution_recurrenceplots_小波变换_递归图

递归图(reecurrence plots),从相空间重构时间序列的matlab程序,

Python数据结构(四)——递归

递归 递归是一种解决问题的方法,将问题分解为更小的子问题,直到得到一个足够小的问题可以被很简单的解决。通常递归涉及函数调用自身。递归允许我们编写优雅的解决方案,解决可能很难编程的问题。 计算整数列表和 # version1 def list_sum(num_list): num_sum = 0 for i in num_list: num_sum +...

ds19991999的博客 1427

UE5 中 Python 编程:Python 代码加载到 UE5 中,如何供蓝图节点调用

配置 python 代码的路径,使 UE5 启动时,加载代码文件。重启之后,在蓝图中右键,就能搜索到你定义的方法了。参数为 str 字符串类型,返回值为 向量数组。注意:一定要 重启 UE5。

topcss的专栏 3996

Cadence Allegro 17.2 PCB设计避坑指南:从焊盘制作到封装绘制的完整流程

本文详细解析了Cadence Allegro 17.2在PCB设计中的关键操作技巧,从焊盘制作到封装绘制的完整流程。通过0402电阻和2.54mm排针的实例,揭示新手常见错误及解决方案,包括焊盘参数设置、层类型区分和坐标输入规范,帮助工程师避免设计返工和生产事故。

weixin_28683391的博客 408

Python 基础语法-turtle篇

Python 基础语法-turtle篇今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类。 -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle的属性。brad.shape(‘arrow’).’arrow’指的是乌龟的形状。brad.color(‘yellow’)-颜色;brad.shape(10)-速度。Python文档里说10是比较快的速

shiyueyue0822的博客 4262

幻尔串口总线舵机控制Python SDK

幻尔串口总线舵机控制Python SDK,可以直接在PC端,不需要借助单片机对舵机进行控制。

daishabby2486的博客 4085

Python学习笔记(一):最基本的HelloWorld

1、Python和Java、c++等语言并没有太大的区别,对于刚接触这门语言的我来说,远没有接触prolog等语言这样的差异。唯一的不同,仅仅是和javascript类似。 2、基本环境配置,无,基本直接安装就可以使用了,Java好歹需要配置环境变量 3、入门的HelloWorld (1)下面的代码是画一个五角星 import turtle window=turtle.Screen() p

当空皓月 855

PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图: Work Flow: 首先对输入source (N×3N \times 3N×3)与template (M×3M \times 3M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector:Φ(PS).

dloading7的博客 1647

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2209

python编写代码运用递归画图形_python数据结构与算法 22 递归图形

上节中我们已经知道有些问题,如果用递归解决变得非常容易。但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么。这一节我们引入几个例子,用递归的方法画几个有趣的图形,通过观察图形的生成,也许能帮助你洞察递归的过程,从而学会递归的方法。我们要用的工具是python的图形模块turtle,这个模块伴随python的全部版本而且很容易使用,语法也简单。你可以创建一个t...

weixin_39888082的博客 1009

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

python中递归函数的轨迹_python数据结构与算法 22 递归图形

上节中我们已经知道有些问题,如果用递归解决变得非常容易。但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么。这一节我们引入几个例子,用递归的方法画几个有趣的图形,通过观察图形的生成,也许能帮助你洞察递归的过程,从而学会递归的方法。我们要用的工具是python的图形模块turtle,这个模块伴随python的全部版本而且很容易使用,语法也简单。你可以创建一个t...

weixin_39988888的博客 188

C#对接EtherNet/IP协议 完整版|罗克韦尔AB PLC通信+CIP核心概念全解析

你做罗克韦尔(AB) PLC工业上位机开发,是唯一的首选协议,没有之一!EtherNet/IP(Ethernet Industrial Protocol)是基于标准以太网的工业级通信协议,由罗克韦尔自动化主导开发,是ODVA(开放设备网络供应商协会)主推的工业以太网标准,也是目前全球应用最广泛的工业以太网协议之一。原生适配罗克韦尔AB PLC:Micro800、CompactLogix、ControlLogix、Micro850等全系AB PLC原生标配EtherNet/IP,无需额外配置,开箱即用;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 891

基于深度学习的农作物病虫害检测识别系统:YOLOv8 + UI界面 + 数据集

该系统的目标是使用YOLOv8模型自动检测农作物的病虫害,并通过UI界面提供实时反馈。用户可以通过上传图像,系统会输出图像中是否存在病虫害以及具体种类。数据集准备与处理:收集并准备包含农作物病虫害图像的数据集,并进行标注和数据增强。YOLOv8模型训练:使用YOLOv8训练农作物病虫害检测模型。UI界面设计与开发:开发一个用户友好的界面,支持上传图像并展示检测结果。系统测试与优化:评估模型的准确性、实时性,并对系统进行优化。

YOLO 883

【Python】Python 100题 分类入门练习题 - 新手友好

【代码】【Python】Python 100题 分类入门练习题 - 新手友好 - 整合篇。

用最通俗的语言,讲述对技术的理解。 4862

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Python算法】掌握常见算法,提升代码效率!

算法是一组明确的步骤或规则,用于解决特定问题或执行特定任务。在编程中,算法的选择对于程序的性能至关重要。选择合适的算法能够显著提升程序的运行效率。在这篇博客中,我们探讨了多种常见的Python算法,包括排序、查找、递归、图算法和字符串处理等。掌握这些算法不仅能提升代码的效率,还能增强你的编程能力。算法的选择和实现是编程中不可或缺的一部分,理解其背后的原理将使你成为更出色的开发者。希望本文能帮助你在Python编程的旅程中更进一步!

萧鼎的博客 943

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python 算法详解:从原理到实践

算法是计算机科学的核心,它是解决问题的步骤和方法。Python 作为一种功能强大的编程语言,提供了丰富的工具和库来实现各种算法。掌握 Python 算法不仅可以提高程序的效率,还可以培养解决问题的思维能力。

lady_mumu的博客 2086

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python程序设计机械工业出版社课后答案-Python语言程序设计

图书简介本书以问题驱动的方式对Python程序设计进行综合介绍。全书共分三个部分,首先介绍基本程序设计技术以及数据类型、变量、常量、简单函数等内容,随后利用抽象、封装和多态性来了解面向对象程序设计,最后通过对数据结构和算法的讲解,循序渐进,掌握Python程序设计。书中引入实例解释基本概念,同时提供大量不同难度的编程题,帮助读者理解和巩固。本书可作为高等院校相关专业的基础教材,也可作为Python...

weixin_39777163的博客 2130

leetcode刷题记第22题解法(python解析)(括号生成)

leetcode刷题记--> 22题解法(python解析)题目定义解题1. 暴力解决(列表)2. 无名方法3. 使用堆栈4. 回溯法(也是递归)5. 暴力法(相比于方法一更好理解)6. 回溯法(与方法四差不多)实现 题目定义 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n = 3,生成结果为: [ "((()))", "...

qq_42274068的博客 843

CANN ops-transformer MoeFinalizeRoutingV2Grad 算子详解:MoE 路由反向传播的 aclnn 两段式接口与 PyTorch 封装

`aclnnMoeFinalizeRoutingV2Grad` 是 CANN ops-transformer 中 MoE(Mixture-of-Experts)前向路由算子 `MoeFinalizeRoutingV2` 的反向传播算子,它根据正向产生的行索引 `expandedRowIdx` 与路由权重 `scales`,把输出梯度 `gradY` 映射回扩展特征 `expandedX` 的梯度与

gitblog_00376的博客 863

你也能看懂的python算法书,python算法详解电子版

大家好,小编来为大家解答以下问题,python编程从入门到精通pdf网盘,python编程入门经典pdf下载,今天让我们一起来看看吧!原文地址1:https://blog.csdn.net/ai_lover_cat/article/details/135768625。亲爱的朋友们,今天我们要探讨,python算法教程这本书怎么样 你也能看得懂的python算法书,一起探索吧!python手册 http://www.78tp.com/python/第 27章 项目8:使用XML-RPC共享文件401。

2401_86114608的博客 839

python练习案例100例(每天坚持一粒,按时服下)

题目1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析: 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 思路解析: 用三个for循环嵌套输出,并用range()函数进行划定范围1到4,外加if条件语句进行判断三个数字不相等 代码解析: #!/usr/bin/python # -*- coding: UTF-8...

巴胡子 3万+

《Python 100例》练习,基于Python 3.5做了一遍

搜语法的时候无意间在这里发现了个python100题。 本着复习python的想法做了一下,过程中发现有些题不像是python的,网上一搜才知道这东西原名叫做《C语言程序设计100个经典例子》,果然好坑。 挑能做的做了一遍,有的需要思考一下;而有的题对于python而言,实现起来实在太简单了。 ------------------- 2018.2.1 补充tm016,关于datetime使...

watfe的专栏 3万+
上一篇: python数据结构与算法 21 递归的实现和应用
下一篇: python数据结构与算法 23 宾斯基三角形
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值