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

mac2024-05-09  25

递归函数

定义:直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。

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)