繁体   English   中英

在Turtle中绘制树的递归函数

[英]Recursive Function for drawing a tree in Turtle

我正在尝试使用递归函数绘制一棵树。 这是我最好的镜头。 我知道我距离还很遥远,但在尝试修复它时遇到了麻烦。 任何帮助,将不胜感激!

def svTree( trunkLength, levels ):
    """ uses the turtle drawing functions to return a tree with a specified number of levels
    input: two integers, trunkLength and levels
    """

    newtrunkLength = trunkLength *.5

    if levels ==1:
           penup()
    else:

        forward(trunkLength)       
        left(45)         
        svTree(trunkLength * 0.5,levels -1)      
        right(90)
        forward(trunkLength *.5)
        svTree(trunkLength * 0.5,levels -1)      
        left(45)          
        backward(trunkLength)

        forward(trunkLength)       
        right(45)
        svTree(trunkLength * 0.5,levels -1)
        left(90)
        svTree(trunkLength * 0.5,levels -1)
        right(45)
        backward(trunkLength)

        return  svTree(newtrunkLength,levels -1)   

这是我的新尝试:我认为可以更接近Y,但是我认为我的递归步骤有缺陷……请帮助! 谢谢! :)

def svTree( trunkLength, levels ):
    """ uses the turtle drawing functions to return a tree with a specified number of levels
    input: two integers, trunkLength and levels
    """

    newtrunkLength = trunkLength *.5

    if levels ==1:
           penup()
    else:

        forward(trunkLength)       
        left(45)         
        forward(trunkLength * 0.5)
        penup()
        backward(trunkLength * 0.5)
        right(90)
        pendown()
        forward(trunkLength *.5)
        penup()
        backward(trunkLength *.5)
        right(180)
        left(45)
        right(180)
        return svTree(newtrunkLength,levels-1)

复制粘贴可以很好地表明您做错了什么。 排除重复部分。

最有可能的是,您不想在备份时进行绘制,因此请在backward()之前调用penup() backward()

另外,您希望所有子树都从同一点开始增长,因此您需要在每次递归调用之后返回。

最后,您永远不会使用返回的值,那么return行中的递归调用试图实现什么呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM