Python 海龟画树的递归函数

Python 海龟画树的递归函数,python,function,recursion,tree,turtle-graphics,Python,Function,Recursion,Tree,Turtle Graphics,我试图用递归函数画一棵树。这是我最好的机会。我知道我离这里很远,但我在试图修复它时遇到了困难。任何帮助都将不胜感激 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 """ new

我试图用递归函数画一棵树。这是我最好的机会。我知道我离这里很远,但我在试图修复它时遇到了困难。任何帮助都将不胜感激

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,但我认为我的递归步骤有缺陷。。。请帮忙!谢谢!:)


复制粘贴是一个很好的迹象,表明你做错了什么。排除重复部分

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

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


最后,您从不使用返回的值,因此在
返回
行中递归调用试图实现什么?

好的,我认为这更接近:我可以做第一个Y,但是我的递归步骤搞乱了。。。def svTree(trunkLength,levels):newtrunkLength=trunkLength*.5如果levels==1:penup()其他:向前(trunkLength)左(45)向前(trunkLength*0.5)penup()向后(trunkLength*0.5)右(90)pendown()向前(trunkLength*.5)penup()向后(树干长度*.5)右(180)左(45)右(180)返回svTree(newtrunkllength,levels-1)
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)