python 递归树

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

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

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

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

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

 上代码:

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

left(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语句,然后自我调用也就是建立栈,最后函数回溯

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

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaituozhizzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值