递归可以用来描述分形。分形常用来描述自然界中许多不规范的、真实对象的数字图形。

递归的图形还能说明递归是如何工作的。以递归绘制图树为例,绘制树枝的过程如下:首先绘制一条直线,然后左转,绘图(递归分支),右转,绘制(递归分支),最后返回原来的直线。

(31条消息) python Turtle Graphics海龟绘图工具_kaituozhizzz的博客-CSDN博客

前面有写到python中海龟绘图的使用

这里我们用海龟绘图制作一个递归树

上代码:

from turtle import *
def branch(length, level):if level <= 0:returnforward(length)left(45)branch(0.6*length, level-1)right(90)branch(0.6*length, level-1)left(45)backward(length)returnleft(90)
branch(100,5)

Sierpinski三角形

绘制分形模式是一种有趣的递归实验,和前面一样,向前移动,递归调用,后转,左转120°。

需要跟踪层次,定义停止的基本情况,并且有一个长度参数

上代码:

from turtle import *def sierpinski(length,depth):if depth > 1: dot()if depth == 0:stamp()else:forward(length)sierpinski(length/2, depth-1)backward(length)left(120)forward(length)sierpinski(length/2, depth-1)backward(length)left(120)forward(length)sierpinski(length/2, depth-1)backward(length)left(120)sierpinski(200,6)

但还是不全面,具体引用下面:(63条消息) 实践 - 使用Python画一棵递归分形树_饼干叔叔@海洋的博客-CSDN博客_python递归树

树-Tree是一种数据结构,它用于模拟真实世界中的树形结构,通常描绘成上图的样子。为了说明方便,作者把每个节点用字母作了标识。

​ T是一棵树,树上的每个圆圈称之为一个节点-node,其中,a是树T的根节点 - root node。节点可以有后代 - descendents,其中,直接的后代称为儿子节点 - child。上图中,b,c,d是节点a的儿子,h,i是节点d的儿子。有儿子的节点称为内节点,没有儿子的节点称为叶子-leaf。上图中,e,f,k等节点没有儿子,作者用粗线圆作了标识,它们是叶子。

​ T’是树T的一棵子树-sub tree,其根节点为d,我们称树T’是树T中以d节点为根的子树。理论上,任何一个节点其及全部后代都可视为一棵树。

Point类有成员x和y,表明一个坐标点。TreeNode类表示一个树节点。类成员maxDepth表示树所允许的最大深度。类成员nBranches表示“建议”的树分叉数,即一根树支将分出多少根下层树支。此处之所以用了“建议”一词,是因为实际树的生成过程中分支数会引入随机成分。

​ TreeNode对象的children属性是其儿子列表,depth表示该节点在树中的深度。TreeNode对象的另外几个属性需要结合下图来理解,这是作者在树上取下的一个小树支。下图中,a是一个TreeNode节点,其bottom表示以该节点为根的子树的“下”顶点;其top表示以该节点为根的子树的“上”顶点。注意,这里的上下打了引号,那是因为实践中,树支因地球引力,可能事实上倒垂向下。

​ drawingTop定义为该节点自身(不含其子孙)的描绘用“上”顶点。a节点在树中的实际表现为一段树支,树支的描绘范围即为bottom至drawingTop点。从drawingTop一直到top则是a的子孙们的描绘区域。下图中,b,c,d为a的儿子,b,c,d也是TreeNode类型,其bottom应等于a的drawingTop。

总结:

递归得到本质是函数的自我调用,

--------------------------------------------------------------------------------------------------------------------------------总结

递归的本质是,函数的自我调用,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,大大地减少了程序的代码量。

递归的能力在于用有限的语句来定义对象的无限集合。

首先是使用了IF语句,然后自我调用也就是建立栈,最后函数回溯

希望多得几个赞啊,得个五一勋章

python 递归树相关推荐

  1. python 递归实现树的三种遍历

    python 递归实现树的三种遍历 class TreeNode:def __init__(self,data):self.data = dataself.left = Noneself.right ...

  2. python 递归 写平方_Python算法:推导、递归和规约

    注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心知识:Induction(推导).R ...

  3. python数据结构 树_python 数据结构四 之 二叉树和树

    python数据结构教程第四课 树形结构是复杂结构中最简单的一类,这是一类非常重要的结构,在实际中使用广泛,反映了许多计算过程的抽象结构 一.简介 1.树 2.二叉树 二.二叉树和树的抽象数据类型(A ...

  4. python 递归-递归可视化

    python 递归-递归可视化 文章目录 python 递归-递归可视化 1.实现 a. 螺旋线 b. 分形树 c. 谢尔平斯基三角 2.递归可视化-Coding 1.实现 a. 螺旋线 指定原始单边 ...

  5. python线段树编写,很冗长,不过不难理解。

    python线段树编写 前言 一.题目及代码编写 二.补充说明 三.总结 前言 以LC 729. 我的日程安排表 I 为例 这道题不推荐使用这种解法 非常的慢,而且代码超级容易记错! 你没看错 记错! ...

  6. 判断某数组是不是二叉树的后序遍历序列 python递归与非递归解法

    python 递归 class Solution:def VerifySquenceOfBST(self, sequence):# write code hereif len(sequence) &l ...

  7. Python递归获取文件夹下面所有文件名字:

    Python递归获取文件夹下面所有文件名字: def getAllFiles(targetDir):files = []listFiles = os.listdir(targetDir)for i i ...

  8. python递归题目_Python递归的问题?

    import time def outer(F): def wrapper(x): start = time.time() F(x) end = time.time() print(end - sta ...

  9. LeetCode 21. Merge Two Sorted Lists--合并2个有序列表--python递归,迭代解法

    题目地址: Merge two sorted linked lists and return it as a new list. The new list should be made by spli ...

最新文章

  1. 7.26-Codeforces Round #372 (Div. 2)
  2. 第十五届智能车竞赛技术报告-成电金秋-AI电磁
  3. 1.4 为什么深度学习会兴起-深度学习-Stanford吴恩达教授
  4. RecursiveTask和RecursiveAction的使用 以及java 8 并行流和顺序流
  5. 大学计算机上机实验指导与测试pdf,4大学计算机基础上机实验指导与习题--习题.pdf...
  6. python的常量和变量_python中的常量和变量代码详解
  7. 二 Linux 简单配置
  8. mysql基础1-数据库安装配置及语句规范
  9. 删除隐藏网卡(本机IP地址被占用)
  10. 量子计算机人类复活,死人有没有可能复活?从量子尺度来分析是有可能
  11. Vim激荡30年发展史
  12. 每天做好一件事,坦然微笑地面对生活
  13. Exchange 日常管理六之:创建邮箱数据库
  14. mysql 免安装版 启动_Windows下配置启动免安装版本mysql
  15. enumerate()函数详解
  16. 洛谷 P1618 STL全排列方法
  17. 编译原理 C-Minus词法分析(FLEX)
  18. 有道文档翻译导出文档_翻译文档的5个技巧
  19. 运用简单的超市购物车系统,理解重写equals、hashcode的意义
  20. 掌财社:庄家为什么砸盘到跌停才出货

热门文章

  1. 端口被占用的原因及解决办法
  2. Android实战 - 个人乐逗项目 (项目改动,优化和总结)
  3. 服务器渲染与客户端渲染
  4. 多闪付、岁岁通...字节跳动的支付业务终上正轨,但“逐梦金融圈”谈何容易...
  5. MAC中修改word默认字体
  6. git分支查看及切换
  7. Centos 7 设置MySQL 最大连接数
  8. 涂鸦二次开发BK7231S烧录文档说明
  9. 什么叫双核CPU与双CPU有什么区别?
  10. Android——TabLayout设置选中字体变大,加粗,透明度