递归函数+turtule库显示递归过程

递归函数

定义:直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
在这里插入图片描述

def tree(length):
    if length<5:
        return
    turtle.forward(length)
    turtle.right(20)
    tree(length-15)

在这里插入图片描述
1)、二叉树的绘制过程就是一个递归调用的过程。先向前画length的长度,然后向右转20度,然后递归调用自己再向前画length-15的长度,然后再向右转,直到length<5时结束。
2)、假设初始length为100.当递归到length为25时,进行递归调用tree(length-15),此时再向前画length-15,即10的长度,然后右转20度。
此时ength为10,此时再进行递归调用tree(length-15)。由于length-15=-5<5,故执行return。回到上一层,即上一个节点的位置,当前角度仍为向右20度,length=25。
3)、为了画左分支,然后左转40度,接着调用自己。向前画length-15,即10的长度,然后右转20度,然后再调用自己tree(length-15),此时length=-5,执行return回到length=10,角度为向右20度,然后执行下一句,向左转40度。此时相当于原路径向左转了20度,然后执行递归调用,不满足条件,然后回到当前位置。此时length仍为10,角度为向左20度。然后执行下一句,向右转20度。此时的方向为路径的正前方,然后继续执行下一句,后退length的长度,回到上一个节点。
4)、此时就画完了一个分支,然后逐层返回,就画完了所有分支。

完整代码如下:

import turtle
def tree(length):
    if length<5:
        return
    turtle.pensize(length/4)
    turtle.pencolor("purple")
    turtle.forward(length)
    turtle.right(20)
    turtle.pencolor("blue")
    tree(length-15)
    turtle.left(40)
    turtle.pencolor("red")
    tree(length-15)
    turtle.right(20)
    turtle.backward(length)

def main():
    turtle.left(90)
    tree(100)

if __name__=="__main__":
    main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值