递归函数
定义:直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
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()