Python中三角形收缩的递归方法

Python中三角形收缩的递归方法,python,recursion,geometry,Python,Recursion,Geometry,如果运行以下代码,它将创建两个并排的图形,这些图形是我试图创建的。我需要弄清楚如何使递归方法在第一次绘制之后停止 import turtle def drawTriangle(size): turtle.left(30) turtle.forward(size) turtle.right(120) turtle.forward(size) turtle.right(120) turtle.forward(size) turtle.righ

如果运行以下代码,它将创建两个并排的图形,这些图形是我试图创建的。我需要弄清楚如何使递归方法在第一次绘制之后停止

import turtle

def drawTriangle(size):
    turtle.left(30)
    turtle.forward(size)
    turtle.right(120)
    turtle.forward(size)
    turtle.right(120)
    turtle.forward(size)
    turtle.right(120)
    turtle.up()
    turtle.forward(size)
    turtle.right(30)
    turtle.down()

def drawTriangles(size, depth):
    if (depth < 1):
        pass
    else:
        drawTriangle(size)
        drawTriangles(size / 2, depth - 1)
        turtle.up()
        turtle.left(30)
        turtle.forward(-size)
        turtle.right(120)
        turtle.forward(size * 2)
        turtle.left(90)
        turtle.down()
        drawTriangle(size)
        drawTriangles(size / 2, depth - 1)
        turtle.up()
        turtle.left(30)
        turtle.forward(-size)
        turtle.left(60)
        turtle.forward(size * 2)
        turtle.right(90)
        turtle.down()
turtle.home()
turtle.left(90)
turtle.down()
turtle.speed("normal")
drawTriangles(100, 4)
input("pause")
导入海龟
def drawTriangle(尺寸):
乌龟。左(30)
乌龟。前进(大小)
乌龟,对(120)
乌龟。前进(大小)
乌龟,对(120)
乌龟。前进(大小)
乌龟,对(120)
乌龟
乌龟。前进(大小)
乌龟。右(30)
乌龟
def Draw三角形(尺寸、深度):
如果(深度<1):
通过
其他:
drawTriangle(尺寸)
拉丝三角形(尺寸/2,深度-1)
乌龟
乌龟。左(30)
海龟。前进(-size)
乌龟,对(120)
乌龟。向前(2号)
乌龟。左(90)
乌龟
drawTriangle(尺寸)
拉丝三角形(尺寸/2,深度-1)
乌龟
乌龟。左(30)
海龟。前进(-size)
乌龟。左(60)
乌龟。向前(2号)
乌龟,对(90)
乌龟
海龟之家
乌龟。左(90)
乌龟
乌龟。速度(“正常”)
拉丝三角形(100,4)
输入(“暂停”)

如果我猜的话,可能是因为您调用了以下两次(在drawTriangles()中),并且size变量的值在这两次调用之间没有变化

drawTriangle(size)
drawTriangles(size / 2, depth - 1)

首先,很好的尝试。你真的很亲密,哥们。这似乎是一个有趣的项目

我已经修复了您的代码,并将其包含在下面。你所需要做的就是添加一个特殊的条件来检查你是否在“基准”三角形上。如果是,请返回

import turtle

def drawTriangle(size):
    turtle.left(30)
    turtle.forward(size)
    turtle.right(120)
    turtle.forward(size)
    turtle.right(120)
    turtle.forward(size)
    turtle.right(120)
    turtle.up()
    turtle.forward(size)
    turtle.right(30)
    turtle.down()

def drawTriangles(size, depth, baseTriangle = False):
    if (depth < 1):
        pass
    else:
        drawTriangle(size)
        drawTriangles(size / 2, depth - 1)
        if baseTriangle:
            return
        turtle.up()
        turtle.left(30)
        turtle.forward(-size)
        turtle.right(120)
        turtle.forward(size * 2)
        turtle.left(90)
        turtle.down()
        drawTriangle(size)
        drawTriangles(size / 2, depth - 1)
        turtle.up()
        turtle.left(30)
        turtle.forward(-size)
        turtle.left(60)
        turtle.forward(size * 2)
        turtle.right(90)
        turtle.down()
turtle.home()
turtle.left(90)
turtle.down()
turtle.speed("normal")
drawTriangles(100, 4, baseTriangle = True)
input("pause")
导入海龟
def drawTriangle(尺寸):
乌龟。左(30)
乌龟。前进(大小)
乌龟,对(120)
乌龟。前进(大小)
乌龟,对(120)
乌龟。前进(大小)
乌龟,对(120)
乌龟
乌龟。前进(大小)
乌龟。右(30)
乌龟
def drawTriangles(大小、深度、baseTriangle=False):
如果(深度<1):
通过
其他:
drawTriangle(尺寸)
拉丝三角形(尺寸/2,深度-1)
如果是baseTriangle:
返回
乌龟
乌龟。左(30)
海龟。前进(-size)
乌龟,对(120)
乌龟。向前(2号)
乌龟。左(90)
乌龟
drawTriangle(尺寸)
拉丝三角形(尺寸/2,深度-1)
乌龟
乌龟。左(30)
海龟。前进(-size)
乌龟。左(60)
乌龟。向前(2号)
乌龟,对(90)
乌龟
海龟之家
乌龟。左(90)
乌龟
乌龟。速度(“正常”)
drawTriangles(100,4,baseTriangle=True)
输入(“暂停”)

这是我的解决方案。我整理了一些逻辑,因此,如果深度不是零,三角形将被绘制,递归将被触发两次,一次用于绘制三角形的每个上角。最后,乌龟被移回到它开始的地方

海龟通常是“向上”的,在drawTriangle函数中只会“向下”放置。drawTriangle函数现在还将海龟返回到它开始的位置

注意整数除法。在做任何其他事情之前,我已经将大小转换为浮点数

import turtle

def drawTriangle(size):
    turtle.down()
    turtle.left(30)
    turtle.forward(size)
    turtle.right(120)
    turtle.forward(size)
    turtle.right(120)
    turtle.forward(size)
    turtle.right(150)
    turtle.up()

def drawTriangles(size, depth):
    size = float(size)
    if (depth > 0):
        drawTriangle(size)
        turtle.left(30)
        turtle.forward(size)
        turtle.right(30)
        drawTriangles(size / 2, depth - 1)
        turtle.right(90)
        turtle.forward(size)
        turtle.left(90)
        drawTriangles(size / 2, depth - 1)
        turtle.left(150)
        turtle.forward(size)
        turtle.right(150)

turtle.home()
turtle.left(90)
turtle.speed("normal")
drawTriangles(150.0, 5)
input("pause")

有一个合乎逻辑的问题是,drawTriangle函数使海龟处于与开始时不同的位置。看看我的答案。我整理了逻辑,减少了代码长度和复杂性。