赞
踩
一、递归介绍
1、定义:函数定义中调用函数自身的方式称为递归。
2、书写递归的2个关键特征:
(1)存在一个或多个基例,基例不需要再次递归,它是确定的表达式;
(2)递归链条,所有递归链条要以一个或多个基例结尾。
(3)书写方式:
通过分支语句来书写。
if 基例条件:
基例语句块
else:
递归链条
二、分步骤讲解分形树,进而用递归实现
1、1阶树
- import turtle as t
- def tree_1(length): #一阶分形树
- t.fd(length) #树干
- t.left(30)
- t.fd(length) #左树枝
- t.bk(length)
- t.right(60)
- t.fd(length)#右树枝
- t.bk(length)
- t.left(30)
- t.bk(length)#回到根部
- t.left(90)
- tree_1(100)
- t.hideturtle()
- t.done()
效果如下:
2、2阶树
- def tree_2(length):#二阶分形树
- t.fd(length)
- t.left(30)
- tree_1(length) #调用一阶树
- t.right(60)
- tree_1(length)#调用一阶树
- t.left(30)
- t.bk(length)
- t.left(90)
- tree_2(100)
- t.hideturtle()
- t.done()
效果如下:
3、3阶树
- def tree_3(length):#三阶分形树
- t.fd(length)
- t.left(30)
- tree_2(length)#调用二阶树
- t.right(60)
- tree_2(length)#调用二阶树
- t.left(30)
- t.bk(length)
- t.left(90)
- tree_3(100)
- t.hideturtle()
- t.done()
效果如下:
4、递归书写分形树(第一种方法)
- def tree_4(length):#递归第一种方法 以length为基例条件
- if length<=0:#基例,当树枝长度<=0时返回
- return
- else:
- t.fd(length)
- t.left(30)
- tree_4(length-10)#树枝长度每次减10
- t.right(60)
- tree_4(length-10)#树枝长度每次减10
- if length-10<=0:#树枝<=0时画一个粉色圆点
- t.color('pink')
- t.dot(10)
- t.color('brown')
- t.left(30)
- t.bk(length)
- tree_4(100)
- t.hideturtle()
- t.done()
效果如下:
5、 递归书写分形树(第二种方法)
- def tree_5(length,n):#递归第二种方法,以n为基例条件
- if n<0: #基例,以树的阶数为基例,注意n<0不是n<=0
- return
- else:
- t.fd(length)
- t.left(30)
- tree_5(length-3,n-1) #树枝和树干的长度可以相同,也可以每次减一个数值,树的阶数每次减1
- t.right(60)
- tree_5(length-3,n-1)#树枝和树干的长度可以相同,也可以每次减一个数值,树的阶数每次减1
- if n<=0:
- t.color('green')
- t.dot(20)
- t.color('brown')
- t.left(30)
- t.bk(length)
- t.speed(0)
- t.left(90)
- t.penup()
- t.goto(0,-300)
- t.pendown()
- tree_5(100,7)
- t.hideturtle()
- t.done()
6、递归书写分形树(第三种方法)
- import turtle as t
- def draw_circle():#画粉色圆点
- t.pencolor('pink')
- t.dot(10)
- t.pencolor('brown')
- def tree_n1(length,n):
- if n==1: #基例,其实就是tree_1
- t.fd(length)
- t.left(30)
- t.fd(length-10)
- draw_circle()
- t.bk(length-10)
- t.right(60)
- t.fd(length-10)
- draw_circle()
- t.bk(length-10)
- t.left(30)
- t.bk(length)
- else:
- t.fd(length)
- t.left(30)
- tree_n1(length-10,n-1)#左枝
- t.right(60)
- tree_n1(length-10,n-1)#右枝
- t.left(30)
- t.bk(length)
- t.left(90)
- tree_n1(100,4)
- # tree_n(100)
- t.done()
效果跟以上两种方法一样,这种写法更容易理解一些。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。