数据结构20:递归可视化(分形树)

57 篇文章 12 订阅
47 篇文章 12 订阅

目录

 

一、图示

1、python的海龟作图系统turtle module

二、自相似递归图形

三、分形树


一、图示

前面的递归算法展现了其简单而强大的一面,但还是难有个直观的概念,下面通过递归作图来展现递归调用的视觉影响力。

 

1、python的海龟作图系统turtle module

python内置,随时可用,以LOGO语言的创意为基础

其意象是模拟海龟在沙滩上爬行而留下的足迹

操作:

  • 爬行:forward(n), backward(n)
  • 转向:left(a), right(a)
  • 抬笔放笔:penup(a), pendown()
  • 笔属性:pensize(n), pencolor(c)

示例一:

import turtle

# 实例化对象
t = turtle.Turtle()

# 指挥海龟作图,向前画100个像素
t.forward(100)

# 作图结束
tturtle.done()

示例二:

import turtle

t = turtle.Turtle()

for i in range(4):
    t.forward(100)
    t.right(90)

turtle.done()

示例三:

import turtle

t = turtle.Turtle()

t.pencolor('red')
t.pensize(3)

for i in range(5):
    t.forward(100)
    t,right(144)

t.hideturtle()

turtle.done()

 

示例四:

import turtle

t = turtle.Turtle()

def drawSpiral(t, lineLen):
    if lineLen> 0:
        t.forward(lineLen)
        t.right(90)
        drawSpiral(t, lineLen-5)

drawSpiral(t, 100)
turtle.done()
    

 

二、自相似递归图形

分型Fractal,是1975年由Mandelbrot开创的新学科,一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似的)是整体缩小后的形状,即具有自相似的性质。

自然界中能够找到众多具有分形性质的物体:海岸线、山脉、闪电、雪花、树

自然现象中所具备的分形特性,使得计算机可以通过分形算法生成非常逼真的自然场景。

分形是在不同尺度上都具有相似性的事物:部分与整体相似。

三、分形树

这样,我们可以把树分为三部分:树干、左边的小树、右边的小树,分解后,正好符合递归的定义:对自身的调用

代码:

import turtle
# t = turtle.Turtle()
def tree(branch_len):
    if branch_len > 5:            # 树干不能画太短,作为 结束条件
        t.forward(branch_len)     # 画树干
        t.right(20)               # 右倾斜20度
        tree(branch_len - 15)     # 递归调用,画出右边的小树
        t.left(40)
        tree(branch_len - 15)
        t.right(20)
        t.backward(branch_len)

t = turtle.Turtle()
t.left(90)          # 笔的初始状态是水平向右的
t.penup()           # 抬笔
t.backward(100)     # 只会海龟作图
t.pendown()         # 放笔
t.pencolor('green')  # 绿色
t.pensize(2)         # 2
tree(75)             # 树干长度为75
t.hideturtle()
turtle.done()

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值